Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f7b3886
feat: Article과 Comment에서 Auto Increment를 통해 생성하도록 수정
kseysh Jan 15, 2026
ec9b5b8
chore: DB 관련 폴더링 수
kseysh Jan 15, 2026
137dd1f
modify: Article과 Comment Entity가 created_at을 가지도록 수정
kseysh Jan 15, 2026
41682f6
feat: Home화면에서 렌더링을 위해 전달해야할 모델값 정의
kseysh Jan 15, 2026
650ddc6
feat: View의 동적렌더링 함수 구축
kseysh Jan 15, 2026
f2d6b67
feat: main 화면 HTML에서 동적 렌더링이 가능하도록 정의
kseysh Jan 15, 2026
534dc08
fix: Article의 likeCount를 Long값으로 변경
kseysh Jan 15, 2026
d5382dd
modify: Comment 작성시 보고있던 화면으로 이동하도록 수정
kseysh Jan 15, 2026
08fe46a
chore: 함수 네이밍 수정
kseysh Jan 15, 2026
4fb579e
feat: comment 작성 html 수정
kseysh Jan 15, 2026
d64405e
feat: dummy data initializer 수정
kseysh Jan 15, 2026
6049f04
fix: 이전 글 다음 글 버튼이 뒤바뀌어 있는 문제 수정
kseysh Jan 15, 2026
e314dd1
modify: 이름을 누르면 마이페이지로 가도록 변
kseysh Jan 15, 2026
5df4e73
feat: 테스트 데이터 삽입 로직 변경
kseysh Jan 15, 2026
0927dbe
fix: 댓글에서 프로필 이미지가 보이지 않는 문제 해결
kseysh Jan 16, 2026
1889256
chore: DatabaseInitializer에서 테스트가 쉬운 아이디, 비밀번호로 변경
kseysh Jan 16, 2026
0765440
feat: UNAUTHORIZED시 로그인 창으로 이동하는 로직을 전역으로 수정
kseysh Jan 16, 2026
f74fc9c
feat: mypage에서 삭제 버튼을 눌렀을 때 클라이언트에서 기본 이미지를 전송하도록 수
kseysh Jan 16, 2026
0f11add
feat: 닉네임 변경 및 암호 변경 로직 정책의 책임을 User 도메인이 들고 있도록 수정
kseysh Jan 16, 2026
5c594c6
fix: 대문자 확장자도 처리가 가능하도록 수정
kseysh Jan 16, 2026
0e11c45
feat: 에러 발생시 로그인 페이지를 이동하는 책임을 서버가 아닌 클라이언트가 하도록 수정
kseysh Jan 16, 2026
10b656f
feat: mypage에서 닉네임 및 비밀번호 길이 제한 추가
kseysh Jan 16, 2026
2f5084c
feat: 이름 변경시 이전 이름과 변경할 이름이 같다면 닉네임 중복 검사를 수행하지 않도록 수정
kseysh Jan 16, 2026
4a8af9e
modify: Article 생성시 권한이 없으면 로그인 화면으로 이동, 성공하면 생성한 아티클로 이동하도록 수정
kseysh Jan 16, 2026
2f28a84
modify: mypage에서 닉네임은 필수적으로 전달되도록 수정
kseysh Jan 16, 2026
f8f65f5
modify: 게시글 작성 후 작성한 게시글로 이동하도록 수정
kseysh Jan 16, 2026
2ebb03f
modify: image가 필수이도록 변경
kseysh Jan 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 41 additions & 20 deletions src/main/java/db/ArticleDatabase.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
package db;

import db.config.CustomJdbcTemplate;
import db.config.RowMapper;
import model.Article;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;

public class ArticleDatabase {

private final CustomJdbcTemplate jdbcTemplate;
private static final String SELECT_SQL = "select * from ARTICLE where ARTICLE_ID = ?";
private static final String INSERT_SQL = "insert into ARTICLE (ARTICLE_ID, CONTENT, USER_ID, IMAGE_ID, LIKE_COUNT) values (?, ?, ?, ?, ?)";
private static final String UPDATE_SQL = "update ARTICLE set CONTENT = ?, USER_ID = ?, IMAGE_ID = ?, LIKE_COUNT = ? where ARTICLE_ID = ?";
private static final String SELECT_ALL_SQL = "select * from ARTICLE";
private static final String SELECT_RECENT_SQL = "select * from ARTICLE order by ARTICLE_ID desc limit 1";
private static final String SELECT_PREV_ARTICLE_SQL = "SELECT * FROM ARTICLE WHERE ARTICLE_ID > ? ORDER BY ARTICLE_ID ASC LIMIT 1";
private static final String SELECT_NEXT_ARTICLE_SQL = "SELECT * FROM ARTICLE WHERE ARTICLE_ID < ? ORDER BY ARTICLE_ID DESC LIMIT 1";
private static final String INSERT_SQL = "insert into ARTICLE (CONTENT, USER_ID, IMAGE_ID, LIKE_COUNT) values (?, ?, ?, ?)";
private static final String UPDATE_LIKE_COUNT_SQL = "update ARTICLE set LIKE_COUNT = LIKE_COUNT + 1 where ARTICLE_ID = ?";

public ArticleDatabase(DataSource dataSource) {
Expand All @@ -21,41 +27,56 @@ public ArticleDatabase(DataSource dataSource) {

public void save(Article article) {
jdbcTemplate.update(INSERT_SQL,
article.articleId(),
article.content(),
article.userId(),
article.imageId(),
article.likeCount()
article.getContent(),
article.getUserId(),
article.getImageId(),
article.getLikeCount()
);
}

public void update(Article article) {
jdbcTemplate.update(UPDATE_SQL,
article.content(),
article.userId(),
article.imageId(),
article.articleId(),
article.likeCount()
);
public Long saveAndGetKey(Article article) {
return jdbcTemplate.updateAndGetKey(INSERT_SQL,
rs -> rs.getLong(1),
article.getContent(),
article.getUserId(),
article.getImageId(),
article.getLikeCount()
).orElseThrow(() -> new RuntimeException("Failed to save article"));
}

public Optional<Article> findById(String articleId) {
public Optional<Article> findById(Long articleId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new ArticleRowMapper(), articleId);
}

public void addLikeCount(String articleId) {
public Optional<Article> findRecentArticle() {
return jdbcTemplate.queryForObject(SELECT_RECENT_SQL, new ArticleRowMapper());
}

public void addLikeCount(Long articleId) {
jdbcTemplate.update(UPDATE_LIKE_COUNT_SQL, articleId);
}

static class ArticleRowMapper implements RowMapper<Article>{
public Optional<Article> findPreviousArticle(Long articleId) {
return jdbcTemplate.queryForObject(SELECT_PREV_ARTICLE_SQL, new ArticleRowMapper(), articleId);
}

public Optional<Article> findNextArticle(Long articleId) {
return jdbcTemplate.queryForObject(SELECT_NEXT_ARTICLE_SQL, new ArticleRowMapper(), articleId);
}

public List<Article> findAll() {
return jdbcTemplate.query(SELECT_ALL_SQL, new ArticleRowMapper());
}

static class ArticleRowMapper implements RowMapper<Article> {
@Override
public Article mapRow(ResultSet rs) throws SQLException {
return new Article(
rs.getString("ARTICLE_ID"),
rs.getLong("ARTICLE_ID"),
rs.getString("CONTENT"),
rs.getString("USER_ID"),
rs.getString("IMAGE_ID"),
rs.getInt("LIKE_COUNT")
rs.getLong("LIKE_COUNT")
);
}
}
Expand Down
35 changes: 13 additions & 22 deletions src/main/java/db/CommentDatabase.java
Original file line number Diff line number Diff line change
@@ -1,53 +1,44 @@
package db;

import db.config.CustomJdbcTemplate;
import db.config.RowMapper;
import model.Comment;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Optional;
import java.util.List;

public class CommentDatabase {

private final CustomJdbcTemplate jdbcTemplate;
private static final String INSERT_SQL = "insert into COMMENT (COMMENT_ID, CONTENT, USER_ID, ARTICLE_ID) values (?, ?, ?, ?)";
private static final String UPDATE_SQL = "update COMMENT set CONTENT = ?, USER_ID = ?, ARTICLE_ID = ? where COMMENT_ID = ?";
private static final String SELECT_SQL = "select * from COMMENT where COMMENT_ID = ?";
private static final String INSERT_SQL = "insert into COMMENT (CONTENT, USER_ID, ARTICLE_ID) values (?, ?, ?)";
private static final String SELECT_SQL_BY_ARTICLE_ID = "select * from COMMENT where ARTICLE_ID = ?";

public CommentDatabase(DataSource dataSource) {
jdbcTemplate = new CustomJdbcTemplate(dataSource);
}

public void save(Comment comment) {
jdbcTemplate.update(INSERT_SQL,
comment.commentId(),
comment.content(),
comment.userId(),
comment.articleId()
comment.getContent(),
comment.getUserId(),
comment.getArticleId()
);
}

public void update(Comment comment) {
jdbcTemplate.update(UPDATE_SQL,
comment.content(),
comment.userId(),
comment.articleId(),
comment.commentId()
);
}

public Optional<Comment> findById(String commentId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new CommentRowMapper(), commentId);
public List<Comment> findAllByArticleId(Long articleId) {
return jdbcTemplate.query(SELECT_SQL_BY_ARTICLE_ID, new CommentRowMapper(), articleId);
}

static class CommentRowMapper implements RowMapper<Comment>{
static class CommentRowMapper implements RowMapper<Comment> {
@Override
public Comment mapRow(ResultSet rs) throws SQLException {
return new Comment(
rs.getString("COMMENT_ID"),
rs.getLong("COMMENT_ID"),
rs.getString("CONTENT"),
rs.getString("USER_ID"),
rs.getString("ARTICLE_ID")
rs.getLong("ARTICLE_ID")
);
}
}
Expand Down
8 changes: 0 additions & 8 deletions src/main/java/db/DatabaseConfig.java

This file was deleted.

36 changes: 0 additions & 36 deletions src/main/java/db/DatabaseInitializer.java

This file was deleted.

11 changes: 4 additions & 7 deletions src/main/java/db/ImageDatabase.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package db;

import db.config.CustomJdbcTemplate;
import db.config.RowMapper;
import enums.ContentTypes;
import exception.NotFoundException;
import model.Image;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Optional;

public class ImageDatabase {

Expand All @@ -28,16 +29,12 @@ public void update(Image image){
jdbcTemplate.update(UPDATE_SQL, image.bytes(), image.fileName(), image.contentType().getExtension(), image.imageId());
}

public Optional<Image> findById(String imageId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new ImageRowMapper(), imageId);
}

public Image findByIdOrThrow(String imageId) {
public Image findByIdOrElseThrow(String imageId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new ImageRowMapper(), imageId)
.orElseThrow(() -> new NotFoundException(imageId + " image not found"));
}

static class ImageRowMapper implements RowMapper<Image>{
static class ImageRowMapper implements RowMapper<Image> {
@Override
public Image mapRow(ResultSet rs) throws SQLException {
return new Image(
Expand Down
16 changes: 15 additions & 1 deletion src/main/java/db/UserDatabase.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package db;

import db.config.CustomJdbcTemplate;
import db.config.RowMapper;
import exception.NotFoundException;
import model.User;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;

public class UserDatabase {
Expand All @@ -13,6 +17,7 @@ public class UserDatabase {
private static final String INSERT_SQL = "insert into USERS (USER_ID, PASSWORD, NAME, EMAIL, IMAGE_ID) values (?, ?, ?, ?, ?)";
private static final String UPDATE_SQL = "update USERS set PASSWORD = ?, NAME = ?, EMAIL = ?, IMAGE_ID = ? where USER_ID = ?";
private static final String SELECT_SQL = "select * from USERS u where u.USER_ID = ?";
private static final String SELECT_ALL_SQL = "select * from USERS";
private static final String SELECT_SQL_BY_NAME = "select * from USERS where NAME = ?";

public UserDatabase(DataSource dataSource) {
Expand Down Expand Up @@ -45,11 +50,20 @@ public Optional<User> findById(String userId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new UserRowMapper(), userId);
}

public User findByIdOrElseThrow(String userId) {
return jdbcTemplate.queryForObject(SELECT_SQL, new UserRowMapper(), userId)
.orElseThrow(() -> new NotFoundException("user not found"));
}

public Optional<User> findByName(String name) {
return jdbcTemplate.queryForObject(SELECT_SQL_BY_NAME, new UserRowMapper(), name);
}

static class UserRowMapper implements RowMapper<User>{
public List<User> findAll() {
return jdbcTemplate.query(SELECT_ALL_SQL, new UserRowMapper());
}

static class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs) throws SQLException {
return new User(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package db;
package db.cache;

public interface Cache<K, V> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package db;
package db.cache;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package db;
package db.cache;

import java.util.Optional;
import java.util.UUID;

import model.User;

public class SessionManager {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package db;
package db.config;

public abstract class ConnectionConst {

private ConnectionConst(){
}

public static final String URL = "jdbc:h2:tcp://localhost/~/test";
public static final String USERNAME = "sa";
public static final String PASSWORD = "";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package db;
package db.config;

import javax.sql.DataSource;
import java.io.PrintWriter;
Expand All @@ -8,7 +8,7 @@
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

import static db.ConnectionConst.*;
import static db.config.ConnectionConst.*;

public class CustomDataSource implements DataSource {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package db;
package db.config;

import javax.sql.DataSource;
import java.sql.*;
Expand Down Expand Up @@ -47,6 +47,26 @@ public int update(String sql, Object... args) {
}
}

public <K> Optional<K> updateAndGetKey(String sql, RowMapper<K> rowMapper, Object... args) {
try (Connection con = dataSource.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

setParameters(pstmt, args);
pstmt.executeUpdate();

try (ResultSet rs = pstmt.getGeneratedKeys()) {
if (rs.next()) {
return Optional.ofNullable(rowMapper.mapRow(rs));
}
return Optional.empty();
}

} catch (SQLException e) {
throw new RuntimeException("DB Update Error: " + sql, e);
}
}


private void setParameters(PreparedStatement pstmt, Object[] args) throws SQLException {
for (int i = 0; i < args.length; i++) {
pstmt.setObject(i + 1, args[i]);
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/db/config/DatabaseConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package db.config;

import db.*;

public class DatabaseConfig {
private DatabaseConfig(){
}

public static final UserDatabase userDatabase = new UserDatabase(new CustomDataSource());
public static final ArticleDatabase articleDatabase = new ArticleDatabase(new CustomDataSource());
public static final ImageDatabase imageDatabase = new ImageDatabase(new CustomDataSource());
public static final CommentDatabase commentDatabase = new CommentDatabase(new CustomDataSource());
}
Loading