domain 패키지 구조로 변경
·
프로젝트/가계부
💻 발생상황기존에는 데이터베이스의 테이블과 매칭되는 객체를 entity패키지에 정의했었다. 하지만 생각해보니 나는 JPA를 사용하지 않고 JdbcTemplate으로 데이터베이스를 조작하는 상황인데 Entity로 정의하는게 맞을까?란 의문점이 (예전부터) 들었다. 💻변경 전처음에는 entity, dto, enums 를 각자 다른 패키지에 정의했었다. 💻변경 후💻과정entity 패키지 이름을 domain으로 변경우선, entity와 domain의 차이가 뭔지 알아야 한다.Domain : 소프트웨어로 해결하고자 하는 문제 영역 또는 업무 영역 전체(개념적 의미)Entity : 도메인 영역 내 고유한 식별자(PK)로 식별 가능한 개별 객체로, 주로 JPAF를 사용하면 @Entity 어노테이션을 사용나는..
JWT 기반 인증 처리
·
프로젝트/가계부
💻발생상황지금 프로젝트에서는 인증을 스프링 시큐리티로 진행하고 성공하면 세션에 회원 식별번호, 닉네임, 프로필을 저장하고 있다.닉네임과 프로필은 단순히 사이드바에서 정보를 보여주기 위한 정보여서 외부인이 봐도 상관 없는 정보지만, 회원 식별번호는 중요한 정보다.회원 식별번호가 데이터베이스 PK이기 때문에 모든 정보에 접근이 가능한데 해당 세션을 탈취당하면 회원의 주요 정보를 외부에서 알기 때문에 보안에 위협적이다. 💻변경 전인증을 성공하면 세션(HttpSession)에 회원번호(mid), 닉네임(nickName), 프로필(profile)을 저장했다.하지만 서버에 세션이 쌓여서 확장성이 떨어지고 세션을 탈취 위험이 높다. CustomAuthSuccessHandler 클래스@Override public ..
[상태 패턴] 동영상 재생
·
문제모음/ChatGPT
문제동영상 플레이어는 재생(Playing), 일시정지(Paused), 정지(Stopped) 상태가 있습니다. 상태에 따라 play(), pause(), stop() 동작이 다르게 작동하도록 구현하세요.요구사항VideoPlayer 클래스는 상태를 가집니다.PlayerState 인터페이스를 구현하는 상태 클래스별로 play, pause, stop 동작을 정의합니다.상태별로 메시지를 출력하고, 필요시 상태 전환이 일어나도록 합니다.현재 상태: Stoppedplay() 호출 -> 재생 시작pause() 호출 -> 일시정지stop() 호출 -> 정지 접근방법✔ VidoPlayer 클래스가 상태를 가지기 때문에 내부에서 상태를 저장할 변수 필요 코드public class Main { public static v..
[커맨드 패턴] 음악 플레이어
·
문제모음/ChatGPT
문제 사용자는 음악 플레이어를 앱에서 제어할 수 있습니다. 플레이어는 재생(play), 정지(stop) 기능이 있습니다.요구사항MusicPlayer 클래스 작성 (play(), stop() 메서드가 존재합니다.PlayCommand, StopCommand 를 작성해야 합니다.AppInvoker가 setCommand()와 executeCommand()를 가집니다음악이 재생됩니다.음악이 정지됩니다. 접근방법✔ 음악 플레이어의 실행될 기능의 커맨드의 조상 필요 코드public class Main { public static void main(String[] args) { AppInvoker invoker = new AppInvoker(); MP3 mp3 = new MP3(); invoker.setCom..
[전략 패턴] 배송비 계산
·
문제모음/ChatGPT
문제쇼핑몰의 배송 방식은 아래와 같이 있습니다.택배는 3000원, 편의점 픽업은 1500원, 퀵 배송은 7000원의 배송비가 추가됩니다.요구사항DeliveryStrategy 인터페이스에서 calculateFee(int basePrice) 메서드가 존재합니다.CourierDelivery, ConvenienceStoreDelivery, QuickDelivery 클래스를 구현해야 합니다.Order 클래스에서 배송 전략을 받아 최종 가격을 계산합니다.(단, 배송비는 상품가격이 50,000원 이상일때 배송 전략을 각각 적용됩니다.)택배 배송: 총 결제 금액 = 53000원편의점 픽업: 총 결제 금액 = 51500원퀵배송: 총 결제 금액 = 57000원 접근방법✔ 모든 배송 방식의 조상은 DeliveryStra..