목록Springboot (7)
co-cherry
@Transactional 트랜잭션(Transaction)데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합 여러 개의 DB 작업을 하나의 단위로 묶고 분할할 수 없음 (원자성)→ 전부 성공 또는 전부 실패만 가능 트랜잭션의 핵심 기능: ACID Atomicity (원자성) All or Nothing 전부 성공하거나 전부 실패 Consistency(일관성) 트랜잭션 실행 전후로 데이터베이스가 일관된 상태를 유지 Isolation(격리성) 동시에 실행되는 트랜잭션들이 서로 영향을 주지 않음 Durability(지속성) 커밋된 트랜잭션은 영구적으로 저장됨 왜 트랜잭션이 필요할까?트랜잭션은 데이터의 정합성을 보장한다. 여기서, 정합성이란 데이터가 모순 없이 일치하는 상태를 의미..
페이징게시글 목록 조회 API를 구현하면 이와 같은 형태로 작성하게 된다. List posts = postRepository.findAll(); 로컬에서 데이터 10개 정도로 테스트할 때는 문제 없이 잘 동작하지만, 게시글이 10,000개 정도 있다고 가정해보자. 이 API를 호출하는 순간,데이터베이스는 10,000개의 행을 읽어서 메모리에 올린다애플리케이션은 10,000개의 Post 객체를 생성한다네트워크를 통해 수 MB의 JSON 데이터가 전송된다프론트엔드는 10,000개의 게시글을 한꺼번에 렌더링하려 시도한다우리의 서버 메모리는 낭비되고 응답은 느려지며 멈춘 듯한 화면을 보게 될 것이다. 이 문제에 대한 해결책이 Paging이다. '한번에 모든 데이터를 보여 줄 필요가 없다면 필요한 만큼만 잘라서..
Spring Security Spring 기반 애플리케이션에 인증(Authentication)과 인가(Authorization)기능을 제공하는 프레임워크 인증(Authentication) 사용자가 누구인지 확인하는 과정 (로그인 폼, OAuth2, JWT, LDAP 등 다양한 방식 지원) 인가(Authorization) 인증된 사용자가 어떤 리소스에 접근할 수 있는지 제어, URL 기반, 메서드 기반으로 권한 설정 가능 보안 공격 방어 CSRF, XSS, Session, Fixation 등 일반적인 보안 취약점을 기본으로 방어 FilterChainHTTP 요청이 Controller에 도달하기 전 통과해야 하는 보안 필터들의 묶음 요청이 Controller에 도달하기 전에 인증/인가/예외 처리가 전부 ..
앞서 게시글 생성과 상세 조회를 구현했다. 이번 시간에는 게시글 삭제와 수정을 구현해보려고 한다. 게시글 삭제와 수정은 작성자만 가능하므로 작성자 권한 검증이 서비스 로직에 들어가야 함을 유의하고 API를 설계해보자. 게시글 삭제 게시글을 삭제하기 위해서는 삭제할 게시글의 Id와 권한 검증을 위해 해당 게시글을 삭제할 user의 Id가 필요하다. 게시글을 삭제하기 전에, 아래 두 가지의 검증이 필요하다.해당 아이디의 게시글이 존재하는지 확인 → 아니라면 POST_NOT_FOUND 반환 해당 게시글의 작성자가 삭제 요청을 보낸 user와 일치하는지 확인(권한 검증) → 아니라면 POST_UNAUTHORIZED 반환@Transactional public void deletePost(Long postI..
*UMC 워크북 내용을 일부 참고하였다. 기능 목록 확정게시판 기능을 구현하기 위한 기능 목록을 작성하였다.(후에 이미지 추가 및 댓글 부분 추가 예정) 게시글 생성게시글 수정게시글 삭제게시글 단건 조회 (상세 보기) 게시글 목록 조회 (페이지, 최신순) ERD 작성위 게시판 기능을 기준으로 User와 Post 엔티티를 최소로 정의하였다. Enum의 사용 예시를 보여 주기 위해 부가적으로 필드를 추가했지만... 한 명의 회원(1)은 여러 개의 게시글(N)을 작성할 수 있으므로 User와 Post는 1:N의 관계로 설정하였다.또한, Post 엔티티는 작성자의 식별을 위해 user_id를 외래키로 가진다. https://www.erdcloud.com/d/hFup7EsMsQsaM3cYJ springboot-..
공통 응답 형식 구조ApiResponse ← 실제 응답 wrapper 클래스 ├── BaseSuccessCode ← 성공 코드 인터페이스 │ └── GeneralSuccessCode (enum) └── BaseErrorCode ← 에러 코드 인터페이스 └── GeneralErrorCode (enum) ApiResponse실제 응답을 감싸는 공통 응답 *래퍼(wrapper) 클래스*Java의 기본형을 객체로 감싸는 클래스 public class ApiResponse { private final Boolean isSuccess; private final String code; private final String messa..
1. Spring Boot란?Spring 기반 웹 애플리케이션을 쉽고 빠르게 만들 수 있도록 도와주는 Java의 프레임워크 복잡한 설정을 자동으로 처리하는 Auto Configuration 기능 제공 내장 서버(Tomcat) 제공 → 별도의 서버 설치 필요 없음REST API 개발에 많이 사용됨 https://wikidocs.net/160047 1-01 스프링 부트란?**스프링 부트(Spring Boot)** 는 웹 프로그램(웹 애플리케이션)을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크이다. 스프링 부트는 스프링(Spring)…wikidocs.net자세한 내용은 위 링크 참조 (개념 이해에 좋다) 2. Spring Boot 프로젝트 생성하기 IntelliJ IDEA를 사용해 Spring ..
