본문 바로가기

분류 전체보기32

[Spring] ToyProject 2단계(3) - 정리 일주일이 순식간에 지나가고 프로젝트 제출하고 정리의 시간이 되었습니다!😁 모두가 각자의 역할에 책임을 다 해준 아름다운 결과물이 나왔습니다! 프로젝트를 진행하면서 기억하고 넘어가면 좋은 내용들을 정리합니다. LocalDateTime 직렬화/역직렬화를 위한 준비 jackson 라이브러리에서 objectmapper가 남모르게😅 직렬화와 역직렬화를 해줍니다. implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' @Data @NoArgsConstructor @AllArgsConstructor @Builder class Trip { private String name; private String startingPoint; private Strin.. 2024. 2. 4.
[TIL] LocalDateTime to String, String to LocalDateTime Java Spring 프로젝트 실습을 진행하다 보면 LocalDateTime을 사용할 일이 잦다. 사용자의 가입일자, 게시글의 등록일자, 변경일자 등 정확한 날짜와 시간을 데이터베이스에 저장하기 위해서 쓰인다. 이번 토이프로젝트에서도 여행정보를 저장할 때 여정정보를 저장할 때 날짜와 시간 부분에 많이 사용했다. 팀원들끼리 소통을 하면서 진행했지만 역시 아무 일도 없이 지나갈 수는 없는 법. Entity와 DTO를 만드는 과정에서 Entity에서는 LocalDateTime으로 만들고 DTO에서는 String으로 만드는 바람에 여러 가지 해결방법이 있겠지만 1차적으로 데이터타입을 수정하지 않고 DTO에서 Entity로 변환해 주는 과정에서 String을 LocalDateTime으로 변환하는 작업을 수행했다... 2024. 1. 31.
[TIL] Spring Legacy - Java의 enum값을 MySQL 넣기 스프링부트에서 Java의 enum과 데이터베이스의 VARCHAR 타입 연결하는 포스팅은 이전 미니게시판 사이드프로젝트에서 포스팅을 했다. 스프링부트의 메이저 버전에 따라 사용법이 다르기는 하지만.. 2024.01.25 - [프로그래밍/Project] - [Project01] MiniBoard(3) - Custom Annotation 생성, 사용자 Model 생성 [Project01] MiniBoard(3) - Custom Annotation 생성, 사용자 Model 생성 Custom Annotation 생성 각 클래스의 역할 세분화를 위해 Business, Converter Annotation을 만든다. 요청 로직의 흐름은 Client -> Controller -> Business -> Service -.. 2024. 1. 30.
[TIL] LocalDate, LocalTime, LocalDateTime Java version 8 이상에서만 사용이 가능한 api이다. [LocalDate] 날짜 정보만 출력한다. ex) 2024-01-15 [LocalTime] 시간 정보만 출력한다. ex) 11:10:25 [LocalDateTime] 날짜와 시간 정보 모두 출력한다. ex) 2020-10-12T12:32:32.222 [적용] 진행 중인 프로젝트에서 여행 시작일자, 종료일자, 체크인 시간, 체크아웃 시간 등 시간에 대한 모든 타입을 LocalDateTime으로 지정하고, MySQL타입에서는 DATETIME으로 지정했다. 여행 정보를 저장할 때 문제가 발생했다. 사용자의 가입을 처리할 때에는 LocalDateTime.now()를 사용해서 문제없이 지나갔지만, 날짜만 필요한 여행 시작일자와 종료일자에서는 Loc.. 2024. 1. 29.
[Spring] ToyProject 2단계(2) - 역할 분배, 기본 구조 월요일이 되어 팀에 호출(?)되어 역할 분배와 프로젝트 기본 구조를 만들었다. 영광스럽게도 혼자 끄적인 설계를 따라 진행하게 되었다. 사용자, 여행, 여정 크게 3개의 도메인으로 나눠놨을 때 여정 부분을 맡게 되었다. 물론 혼자 다 해보는 프로젝트도 진행 중이고 그 내용으로 포스팅을 진행한다. 여행의 종류(이동, 숙소, 체류)에 대해서는 enum 클래스를 사용하려고 했으나 1차적으로 String으로 처리한 후 시간여유가 있다면 enum클래스로 변경 예정이다. 예습하면서 미리 찾아보는게 좋겠다. [여행 데이터베이스] trip 컬럼명 데이터 타입 조건 설명 자바 변수명 자바 타입 id BIGINT(32) PK, AI 여행 아이디 id Long user_id BIGINT(32) FK, NOT NULL 사용자 .. 2024. 1. 29.
[Spring] ToyProject 2단계(1) - 시작하기 패스트캠퍼스 : 백엔드 개발 부트캠프 ToyProject 2 1단계, 2단계, 3단계로 진행 최종 구현 목표는 '여행과 여정을 기록하고 관리하는 SNS 서비스 2단계 달성목표 : Spring Legacy 기반 프로젝트, DB 설계, DB 트랜잭션, RESTful API 설계 [프로젝트 정의] 회원은 여러 여행 기록을 저장할 수 있습니다. 여행은 여러 여정을 가질 수 있습니다. 여정 정보는 이동정보, 체류정보, 숙박정보 등의 종류를 포함할 수 있습니다. 회원이 가진 전체 여행 리스트를 조회할 수 있습니다. 전체 여행 리스트는 여행 정보와 각 여행에 포함된 여정 이름들을 같이 보여줍니다. 각 여행의 상세 여정 정보는 개별 여행 조회를 통해 수행합니다. 회원은 개별 여행 정보를 조회할 수 있습니다. 특정 여행.. 2024. 1. 28.
[TIL] MyBatis 그리고 ObjectMapper 패캠 백엔드 부트캠프 토이프로젝트 2차가 시작되었다. 온라인 강의 진도 기준으로 스트링부트를 이용한 프로젝트를 진행하고 있었지만, 실강 기준으로 프로젝트가 나오다 보니 헷갈린다. 토이 1차의 자바만을 이용한 여행 웹애플리케이션 콘셉트를 스프링과 MyBatis를 사용해서 API 개발이 목적이다. 왜 안부트요??? 달성목표는 복잡하지 않다. 여행과 여정의 정보를 1:n으로 관계로 설계 여행 정보 등록, 조회, 수정 여행에 포함된 여정의 정보 등록, 조회, 수정 회원은 여러 여행 기록을 등록할 수 있습니다. (회원은 고려하지 않는다.) 회원은 고려하지 않는다...? 회원이 없다면 정보 등록은 누가 하나요??? 더하면 더했지 덜하면 직성이 안 풀리기에 회원등록부터 시작하겠습니다^^ A Few Moments La.. 2024. 1. 28.
[TIL] Spring Annotation Target : 어노테이션을 붙일 수 있는 위치 @Bean Target : METHOD (메서드 레벨) 개발자 본인이 직접 제어할 수 없는 Method에 사용한다. 일반적으로 외부 라이브러리를 Bean으로 등록할 때 사용한다. @Component Target : TYPE (Class, Interface, enum 등 클래스 레벨) 개발자가 직접 개발해서 제어할 수 있는 클래스를 Bean으로 등록할 때 사용한다. @Controller Bean으로 등록되어 View를 렌더링 해서 보여준다. 핸들러메서드에서 ViewName을 반환한다. @RequestMapping("/home") public String index() { return "index"; } 뷰페이지에 데이터를 전달하기 위한 데이터바인딩은 Mode.. 2024. 1. 26.
[Project01] MiniBoard(3) - Custom Annotation 생성, 사용자 Model 생성 Custom Annotation 생성 각 클래스의 역할 세분화를 위해 Business, Converter Annotation을 만든다. 요청 로직의 흐름은 Client -> Controller -> Business -> Service -> Repository 순으로 흘러가고, 응답은 역순으로 반환한다. 요청과 응답의 모델이 다르기 때문에 도메인별로 Converter 클래스를 사용할 예정이다. @Business @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Service public @interface Business { @AliasFor(annotation = Service.class) String value() default ""; } .. 2024. 1. 25.
[Project01] MiniBoard(2) - ObjectMapper, SwaggerUI, Filter 설정 ObjectMapper 설정 Object(객체) -> Json(문자열) 형태로 만들어 내는 직렬화와 Json(문자열) -> Object(객체)로 만들어내는 역직렬화 처리를 할 때 사용 프로젝트 Api에서 변수는 카멜케이스를 사용하고 있는데 클라이언트로의 응답을 내려줄 때 Json에서의 Key는 스네이크케이스를 사용한다. 그렇기 때문에 클라이언트로 응답을 주는 모델(DTO)에 @JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) 어노테이션을 달아주고 사용을 하게 되는데 매번 해당 어노테이션을 달아주는 번거로움을 덜어주기 위함 + 추가 설정이 가능하다. @Configuration public class ObjectMapperConfig .. 2024. 1. 25.