spring 8

[투두메이트 프로젝트] 공통 응답(Response) 객체 만들기

4/9 작성 투두메이트 프로젝트를 진행하던 중, 요청을 보냈을 때 성공이든 실패든 너무 단순한 응답만 받으니 직접 로그를 확인하는 등 디버깅에 불편을 느꼈다.에러가 나면 항상 같은 에러 메세지만 출력되고, 어떤 문제가 발생했는지 알기 위해선 로그를 직접 뒤져야 했다.요청이 성공해도 200OK만 떠서, 어떤 요청이 성공한 건지 명확하지 않았다. 혼자 개발하는데도 이렇게 불편한데, 협업 환경에서는 더 불편하겠다 싶었다. 남이 짠 코드를 테스트하거나 디버깅할 때 불필요하게 시간을 낭비하게 될 것 같다는 생각이 들었다...그래서 응답 객체를 통일해서 클라이언트와 서버 간의 소통을 더 명확히 하자는 생각이 들었다.이 글에서는 그렇게 만들게 된 공통 응답 Response 객체에 대해 정리해보겠다. 기존 postma..

토이프로젝트 2025.05.02

[SpringBoot] Transaction 트랜잭션

서비스 계층의 역할비즈니스 로직을 갖는다여러 SQL에 접속하는 경우 트랜잭션 관리트랜잭션이란?쪼갤 수 없는 업무의 최소 단위"모든 작업이 성공해야 최종적으로 적용됨"을 보장모든 SQL을 성공시키거나, 하나라도 실패하면 모두 실패시킴 MySQL 트랜잭션 명령어(SQL)start transaction;트랜잭션 시작하기commit;트랜잭션 정상 종료 (트랜잭션 시작 후 실행된 모든 SQL 한번에 반영)rollback;트랜잭션 실패 처리 (트랜잭션 시작 후 실행된 모든 SQL 미반영) 실습트랜잭션 실행 후, 테이블에 값 저장. 이 상태에서 다른 MySQL 창에서 해당 테이블의 정보를 검색하면트랜잭션이 시작된 후 아직 commit이나 rollback으로 이 트랜잭션의 반영 여부를 알려주지 않았기 때문에, 다른 단..

스프링부트 2025.03.10

[SpringBoot] Spring Data JPA를 사용한 CRUD

Spring Data JPA v.s. JPASpring Data JPA는 복잡한 JPA 코드를 스프링과 함께 쉽게 사용하도록 도와주는 라이브러리위의 함수들은 복잡한 JPA 코드를 감싼 코드임 전체 틀Spring Data JPA: JPA 사용JPA는 규칙일 뿐이고, 이를 구현한 Hibernate가 코드 역할을 하며Hibernate는 내부적으로 jdbc를 사용한다. 그래서 우리는 Srping Data JPA를 사용하면서 JDBC를 사용하고 있는 것Service에서 JpaRepository를 상속받은 Repository의 함수를 이용해서 CRUD 기능을 구현해보자사용할 repository 클래스가 JpaRepository를 상속받게 하면, 해당 repository는 굳이 @Repository를 붙이지 않아도,..

스프링부트 2025.03.10

[SpringBoot][DB] JPA (이용 배경, 개념, table과 객체 맵핑 실습)

JPA 이용 배경JdbcTemplate을 사용해서, 개발자가 문자열로 저장한 sql을 JdbcTemplate을 이용하여 데이터베이스에 던져주는 식으로 진행했을 때의 한계1. 문자열을 개발자가 직접 작성: 실수할 수 있고, 실수 인지 시점이 느림문자열 내부에서 나는 이 오류는 컴파일 시점이 아닌 런타임 시점에 잡히기 때문.*런타임 시점 오류와 컴파일 시점 오류에 대해서는 아래 글을 참고하세요https://mim-doremi.tistory.com/542. 특정 데이터베이스에 종속적이게 됨데이터베이스를 변경하고자 할 때, 작성했던 레포지토리 클래스를 하나하나 찾아가서 바꿔줘야 함.3. 반복 작업이 많아짐테이블 하나 생성 시 기본적으로 CRUD가 항상 필요한데, 이 쿼리들을 항상 작성해줘야 한다.4. 데이터베이..

스프링부트 2025.03.09

[SpringBoot] Spring Container

스프링 컨테이너란스프링 애플리케이션의 핵심 구성 요소로, 애플리케이션에 사용되는 빈 객체를 관리하는 역할을 한다. 애플리케이션의 시작과 종료, 객체의 생성과 소멸, 의존성 주입 등을 처리스프링 컨테이너의 주요 역할1. 빈 관리스프링 애플리케이션의 객체(빈)을 생성하고, 그 생명 주기를 관리빈을 스프링 컨테이너에 등록하고, 필요한 곳에 주입하여 객체 간의 의존성 문제를 해결2. 의존성 주입 (Dependency Injection)빈 객체 간의 의존성을 자동으로 주입@Autowired, 생성자 주입, 세터 등을 사용하여 빈을 주입받을 수 있다.3. 빈 생명 주기 관리빈의 생성, 초기화, 소멸 관리.4. 스코프(Scope) 관리빈의 스코프 관리.5. 컴포넌트 스캔 (Component Scan)애플리케이션에서 ..

스프링부트 2025.03.09

[SpringBoot] Layered Architecture: Controller, Service, Repository

Layered Architecture소프트웨어 시스템을 기능별로 여러 계층(Layer)로 분리하여 구성하는 아키텍처 패턴각 계층이 특정 역할을 담당다른 계층과 독립적으로 개발 및 관리: 특정 계층의 내부 구현을 변경해도 다른 계층에 미치는 영향이 최소화 -> 유지보수성 좋음Controller, Service, Repository로 구분되는 구조Controller클라이언트 요청을 받고, Service 계층을 호출하여 로직을 처리한 후, 결과를 응답하는 역할API가 진입하는 지점으로써, 요청으로 들어온 HTTP Body를 객체로 변환하는 역할Service비즈니스 로직을 담당하고, 데이터 처리 로직을 Repository 계층에 위임로직, 분기 처리, 예외 처리Repository데이터베이스와 직접적으로 소통하며..

스프링부트 2025.03.08

[UMC] UMC 동국대 8기 Spring파트 합격 후기

UMC는 협업 프로젝트 경험이 없는 나에게 적합한 동아리였다. 기초 지식으로 자바만을 요구했고 프로젝트 경험이 없는 사람도 지원가능한 동아리였다.다른 파트에 비해 내가 지원한 스프링 파트의 지원자가 역시나 터졌던 것 같다. UMC 면접 후기함께 지원한 친구들은 면접관들께서 웃으면서 들어주셨다고 했는데, 나는 마지막 타임이었어서 그런지 면접 분위기가 좋다는 느낌을 받진 못하였다. 추가 모집 이후라 두 명씩 진행하던 면접을 세 명이서 진행하게 되었는데, 상대적으로 확실히 시간이 부족한 것이 느껴졌다.  면접 질문공통 질문, 자소서 기반 질문, 파트 질문 이 세 순서로 나누어 질문해주셨다.공통 질문1. 자기소개-준비한 자기소개2. UMC에 얼마나 많은 시간 투자가 가능한지휴학 중, 알바와 동아리 모두 하지 않..

대외활동 2025.03.08

스프링 프로젝트 시작하기

1. 이미 만들어져 있는 스프링 프로젝트를 다운받기프로젝트를 다운받아, IntelliJ로 실행2. spring initializr를 이용해 새로운 프로젝트 시작하기https://start.spring.io/*Language: 최신 프로젝트에서는 Kotlin을 사용하는 경향이 있지만, Java로 만들어진 기존 프로젝트가 많이 존재 *스프링부트 버전: 알파벳이 붙어 있으면, 개발 중이거나 오픈 베타라는 의미*Packaging: Spring Boot에는 톰캣이 내장되어 있어 Jar을 선택하면 됨  의존성 부분*의존성: 프로젝트에서 사용하는 라이브러리나 프레임워크를 의미라이브러리란?프로그래밍을 개발할 때 미리 만들어져 있는 기능을 가져다 사용하는 것프레임워크란?프로그래밍을 개발할 때 미리 만들어져 있는 구조에 ..

스프링부트 2025.02.27