분류 전체보기 53

위클리 페이퍼 - 1주차

git rebase와 git merge의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 설명해주세요.git rebase와 git merge는 모두 브랜치를 통합하는 방법이지만, 작동 방식과 결과가 다르다.Git Merge브랜치를 그대로 병합하면서 공통 조상 이후의 변경사항을 합친다..merge commit이라는 새로운 커밋이 생성되어 브랜치가 합쳐짐.예시git checkout maingit merge feature히스토리 예A---B---C main \ D---E feature | merge commit장점:히스토리를 보존해 팀원 작업 흐름 추적 가능충돌 해결도 한 번만단점:히스토리가 복잡해질 수 있음 (병합 커밋 많아짐)Git rebase..

코드잇 스프린트 고급 프로젝트(Mopl) 개발 회고록

1. 프로젝트 개요이 프로젝트는 '모두의 플리'라는 제목을 가지고 좀 더 자세히 설명하자면 '대규모 트래픽이 예상되는 글로벌 컨텐츠 평점 및 큐레이션 플랫폼'이다. 이 서비스는 영화, 드라마, 스포츠 등 다양한 콘텐츠를 큐레이팅하고 공유하며, 실시간 같이 보기 기능까지 제공하는 소셜 서비스로, 사용자들은 자신만의 플레이리스트를 만들고 다른 사용자와 소통하며 콘텐츠 경험을 확장할 수 있다.주요 기능 : 콘텐츠 데이터 관리 (외부 API를 수집, 배치로 자동 업데이트)콘텐츠 평가 및 큐레이팅 (리뷰, 플레이리스트 생성, 플레이리스트 구독)실시간 같이 보기 (웹소켓 기반 실시간 채팅 및 시청 정보 공유)알림 (SSE기반 실시간으로 사용자에게알림 전송)사용자 관리 (회원가입, 로그인, 소셜 계정 연동, 어드민..

알림 조회 시 겪은 타임존 변환 문제와 해결과정

코드잇 부트캠프 Spring 백엔드 과정의 고급 프로젝트를 진행하면서, 알림 도메인에 대한 개발을 진행하였다.모든 엔티티의 공통 변수는 Base Entity를 만들어 관리하도록 하였고 createdAt, updatedAt, deletedAt을 Base에 자료형을 LocalDateTime으로 선언하여 두었는데, LocalDateTime은 불변 객체라 한 번 생성되면 값이 변경되지 않고 날짜와 시간 개념이 명확하며 타임존과 분리되어 있어 순수한 시간 표현에 적합하다는 장점이 있다. 하지만 알림 도메인 개발도중에 문제가 발생하였다.발생한 문제DB에 알림 발생 시간이 저장될 때 LocalDateTime이 기본 시스템 타임존인 UTC로 저장된다. 하지만 LocalDateTime 자체는 들고 있는 타임존 정보 자체..

코드잇 스프린트 초급 프로젝트(FINDEX) 개발 회고록

1. 프로젝트 개요본 프로젝트는 공공데이터 API를 활용해 금융위원회·거래소 지수 정보를 실시간 수집하고, Spring Boot 기반의 경량·고속 API 연동 도구로 최적화된 성능을 제공합니다. 나아가 직관적 대시보드에서 KOSPI·KOSDAQ·글로벌 인덱스 등 주요 지수의 실시간 변동을 그래프와 숫자로 시각화하고, 사용자 맞춤 알림 기능을 지원합니다.2. 담당한 작업자동연동 설정 관리{지수}와 {활성화} 정보를 가지고 모든 속성을 통해 지수를 비활성화하여 자동 연동 설정을 등록할 수 있다.{지수}와 {활성화}로 자동 연동 설정 목록을 조회할 수 있으며, 정렬 및 페이지네이션을 구현하여 목록을 커서를 내려서 조회할 수 있게 한다. 이 때, 목록에서 {활성화/비활성화} 전환이 가능해야한다.활성화된 지수의 ..

Spring MVC)게시판 만들기 - DTO 추가

이전 게시판 제작 과정에선 Controller에 엔티티를 직접 연결해서 요청 값으로 Board 엔티티를 직접 받게 했다. 하지만 이와 같이 엔티티 값을 직접 받게 되면 문제가 발생한다. 이번에는 DTO에 대해서 그리고 프로젝트에 DTO를 연결한 과정을 기록하려고 한다.우선, DTO란 무엇일까?DTO(Data Transfer Object, 데이터 전송 객체)란 프로세스 간에 데이터를 전달하는 객체를 의미한다. 데이터를 전송하기 위해 사용하는 객체이기에 그 안에 비즈니스 로직 같은 복잡한 코드는 존재하지 않고 순수하게 전달하고 싶은 데이터만 담겨있다. Entity와 Controller를 섬이라고 한다면 DTO는 그 사이를 연결해 주는 다리와 같은 역할을 하는 것이다. 그러면 왜 Entity와 Controll..

Spring MVC 2025.04.25

@PathVariable과 @RequestParam의 차이에 대한 공부

게시판 프로젝트를 진행하면서 가장 헷갈렸던 부분을 고르라고 한다면, Controller부분을 작성할 때 사용되었던 @PathVariable과 @RequestParam이었다. 게시판 프로젝트를 시작하고 Controller를 처음 만들었을 때, 게시글 삭제 부분에서 @PathVariable을 사용했다가 삭제가 이루어지지 않는 것을 보고 '왜 되지 않지? 분명 게시글의 id를 받아와서 삭제 처리가 되어야되는데?'라는 생각으로(이 때는 수정, 상세 문단에서 @PathVariable을 써서 삭제도 당연히 그걸써야되는줄 알았다.)한시간을 넘게 고민을 했었다. 그러던 중 @PathVariable을 제외하고 @RequestParam도 있다는 것을 깨닫고(지금 생각하면 왜 @RequestParam을 제외했는지 이해가 되..

Spring MVC 2025.02.20

Spring MVC)게시판 만들기 - 웹어플리케이션 실행 및 부족한 점 고찰

게시판 프로젝트의 개발이 완료되었다. 이제는 프로젝트와 연동된 h2 Database를 실행시키고 프로젝트를 생성할 때부터 있었던 Application클래스를 실행하여 실제 웹상에서 제대로 동작하는지를 볼 것이다.Controller에서 설정해 주었던 /board를 붙여 http://localhost:8080/board링크를 들어가면 게시판 리스트 페이지가 제대로 동작한다! 다음으로 글쓰기를 클릭하여 게시글 작성이 잘 되는지 살펴보자.글을 작성하여 작성버튼을 누르면 내용은 모르겠지만 제목은 리스트에 제대로 등록된 것을 볼 수 있다.(잘 보이게 하기위해 사진에 깨끗한이란 효과를 입혔다.)이제 글 상세 페이지가 제대로 동작하는지와 글 삭제가 제대로 동작하는 지를 확인해보자. 상세 페이지를 보면 작성시 입력한 제..

Spring MVC 2025.02.07

Spring MVC)게시판 만들기 - Controller 생성

Controller계층 MVC 패턴에서 컨트롤러가 모여있는 곳을 말한다. 컨트롤러는 서비스 계층을 호출하고 그에 따른 결과를 뷰(JSP)에 전달하는 역할을 한다. 쉽게 말하자면 서비스와 뷰를 잇는 다리역할을 하는 것이다.※JPS란?JavaServer Pages의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구이다. @Controller : 해당 클래스가 웹 어플리케이션의 컨트롤러임을 나타낸다. 컴포넌트 스캔(Component-Scan)에 의해 스프링 빈으로 등록되며, 들어온 요청을 해당 컨트롤러에 매핑하여 처리한다. @RequestMapping : 특정 url로 요청(Request)를 보내면 Controller에서 어떠한 방식으로 처리할지 정의하게 되는데, ..

Spring MVC 2025.02.07

Spring MVC)게시판 만들기 - Service 생성

Service 계층에는 비즈니스 로직이 존재하고 트랜잭션(Transaction)을 시작한다. 이 계층은 데이터 접근 계층인 리포지토리를 호출하여 사용한다.※트랜잭션이란?데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻하며 상태를 변화 시킨다는 것은 질의어(SQL)를 이용하여 데이터베이스에 접근하는 것을 의미한다. 이 때 사용하는 질의어의 종류는 아래와 같다.SELECTINSERTDELETEUPDATE@Service : 이 어노테이션 또한 @Repository와 마찬가지로 컴포넌트 스캔(component-scan)에 의해 스프링 빈으로 등록된다. @Transactional : 스프링 프레임워크는 이 어노테이션이 붙어 있는 클래스나 메소드에 트랜잭션(Transaction)을 적용한다. 외부에..

Spring MVC 2025.02.06

Spring MVC)게시판 만들기 - Repository 생성

리포지토리(Repository)란? 리포지토리는 JPA를 직접 사용하고 엔티티 메니저를 사용해 엔티티를 저장하고 조회하는 곳으로 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들을 사용하기 위한 인테페이스이다.(예:findAll, save, delete 등)데이터 처리를 위해선 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요한데,이러한 CRUD를 어떻게 처리할지 정의하는 계층이다. -@Repository : 해당 어노테이션을 사용하면 클래스가 스프링의 Bean으로 등록되어 Component Scan을 통해 자동으로 인식된다.하지만 Spring Data JPA를 함께 사용하면 해당 어노테이션을 사용하지 않아도 자동으로 빈 등록..

Spring MVC 2025.02.05