본문 바로가기

전체 글93

[studyhub] 모듈러 모놀리식에서의 인터페이스 정의 SeatValidator모듈러 모놀리식을 처음 적용하면서 가장 헷갈렸던 것은 인터페이스를 정의하는 위치, 구현하는 위치, 사용하는 위치였다.reservation 모듈 ─ 정의: SeatValidator, MemberValidator (reservation.port) └ 사용: ReservationService — 인터페이스만 호출cafe 모듈 ─ 구현: CafeSeatValidatorImpl (cafe.service)member 모듈 ─ 구현: MemberValidatorImpl (member.service)정의와 사용은 같은 모듈에 있다. 필요한 것을 선언한 쪽이 그것을 쓴다.구현만 다른 모듈에 있다. cafe와 member는 자기 도메인 데이터를 써서 .. 2026. 8. 30.
[studyhub] 시간대 예약 기능 구현 Reservation 엔티티@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name = "reservation")public class Reservation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long memberId; private Long cafeId; private Long seatId; private LocalDateTime startTime; private LocalDateTime endTime; @Enumerated(EnumType.STRING) pri.. 2026. 8. 27.
[studyhub] 카페 검색 API와 N+1 해결 카페 검색 조건 바인딩GET 쿼리 파라미터를 @ModelAttribute로 바로 바인딩한 이유@Getter@Builderpublic class CafeSearchRequest { private String region; private String keyword; private Boolean openNow; // 영업 여부}@GetMapping public ResponseEntity> search(@ModelAttribute CafeSearchRequest request) { return ResponseEntity.ok(cafeService.search(request)); }Spring FrameWork 6.1(Spring Boot 3.2)부터 클래스에 생성자가 정확.. 2026. 8. 20.
[studyhub] 카페 등록 구현 Cafe 엔티티@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name = "cafe")public class Cafe extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50, nullable = false) private String name; @Column(length = 100, nullable = false) private String address; @Column(length = 20, nullable = false) .. 2026. 8. 18.
[studyhub] Member 설계와 로그인, 토큰 재발급 구현 * 해당 게시글에서는 회원가입 로직은 다루지 않는다.member 엔티티member는 회원 도메인의 핵심 애그리거트이다. 인증(로그인)과 회원 정보를 하나의 엔티티가 함께 갖고, Refresh Token의 현재 상태(해시, 만료시각)까지 이 엔티티가 직접 관리한다.@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name = "member")public class Member extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 20, nullable = fa.. 2026. 8. 13.
[studyhub] Custom Error Code 구현 구현의 이유예외 발생 시 HTTP 상태 코드를 몇으로 응답되어야 하는지, 그 정보를 어디에 둘 것인가클라이언트가 메시지 문자열을 파싱하지 않고도 '이게 정확히 어떤 에러인지' 구분하려면 무엇이 필요한가예외 종류가 늘어날 때 이걸 어디에 어떻게 정리해둘 것인가에러 코드를 정의하는 방법을 찾아보다가, 회사에서 진행했던 두 가지 서로 다른 방식이 떠올랐다.1.추상 클래스를 상속public class AuthExceptionCode extends ExceptionCode { public static final AuthExceptionCode UNAUTHORIZED_ACCOUNT = new AuthExceptionCode( HttpStatus.UNAUTHORIZED, "UNAUTHORIZED_A.. 2026. 7. 22.