전체 글 37

스파르타 코딩클럽 이노베이션 캠프 수료 후기

엊그제 시작한 것 같던 캠프가 벌써 끝나버렸다.. 여름이 될 때 부트캠프를 시작해서 수료하니 여름이 끝나있었다..ㅋㅋ 그만큼 100% 몰입을 했었는지는 잘 모르겠다. 정말 열심히는 했는데 뒤돌아보니 더 열심히 할 수도 있었을 것 같다는 생각이 든다. 이제 취업을 준비하면서 그동안의 나를 성찰하는 시간을 가져보고자 기록을 남긴다. 부트캠프 비교 & 이노베이션 캠프를 선택한 계기 이노베이션 캠프를 시작하기 전에 내일 배움 캠프를 먼저 참여했었다. 내배캠을 지원할 당시에는 비전공자로 개발 경험이 전혀 없는 상태였고, 수료할 때는 그래도 서비스 개발 및 배포 프로세스는 이해한 상태로 수료했다. 원래는 내배캠 수료하고 바로 취업하려고 했는데 갑자기 허리디스크가 터져버리는 바람에 강제로 몇 달을 쉬었더니 배웠던걸 ..

Daily life 2023.09.19

Spring Boot(Builder 패턴)

그동안 객체를 생성하기 위해서 생성자 패턴을 통해 객체를 생성하곤 했었다. 하지만 대부분의 레퍼런스에서는 생성자 패턴보다 Builder 패턴을 권장하고 있다. Builder 패턴을 사용해야 하는 이유가 뭘까? 1. 생성자를 오버로딩 하지 않아도 원하는 필드로만 객체를 생성할 수 있다. - 만약 이름, 나이, 몸무게, 키, 성별을 가진 User 객체가 있을 때 이름과, 나이만 입력하여 User 객체를 생성하려는 경우 이름, 나이를 제외한 필드에 더미 데이터를 입력해주거나, 이름, 나이로만 구성된 생성자를 오버로딩해서 객체를 생성해야 한다. public class User { private String name; private int age; private int weight; private int heig..

SpringBoot 2023.08.01

Spring Boot(예약 기능 구현하기)

팀 프로젝트로 에어비앤비 클론 코딩을 진행했고, 내가 맡은 역할은 사용자가 원하는 숙소에 예약을 할 수 있도록 서비스를 구현하는 것이다. 구현한 기능은 예약하기, 예약 내역 확인, 예약 변경, 예약 취소이지만 이번 글에서 주로 다루고 싶은 내용은 예약할 때의 예외 상황(예약하려는 숙소 정보가 없는 경우, 체크아웃이 체크인 보다 빠를 경우, 이미 예약된 날짜를 예약하는 경우)을 처리하는 것이기 때문에 예약하기 기능만 다룰 것이다. Controller 컨트롤러에서 해당 숙소의 id와 입력받은 data를 DTO로 매핑하고, 필터에서 가져온 유저 객체를 Service로 전달한다. @RestController @RequestMapping("/api/rooms/{roomId}") @RequiredArgsConstr..

SpringBoot 2023.07.29

Spring Boot(JSON 타입의 데이터를 LocalDateTime 타입으로 변환하기)

예약하기 기능을 구현하던 중에 클라이언트로부터 Json 타입의 데이터를 받아 LocalDateTime 타입으로 변환하여 DB에 저장해야 하는 상황이 생겼다. 먼저 첫 번째로 시도했던 방법은 Controller에서 @RequestBody 애너테이션으로 RequestDto 객체를 맵핑할 때 날짜 데이터를 String으로 받아 service에서 DateTimeFormatter를 사용하여 사용자가 보낸 데이터를 해당 LocalDateTime 타입으로 변환하여 db에 저장했다. 클라이언트의 Request Data Controller @RequestBody로 Json 형식의 날짜 데이터를 RequestDto로 매핑 @PostMapping("/reservation") public ResponseEntity creat..

SpringBoot 2023.07.28

Spring Boot(build error)

평소에 프로젝트 파일을 build를 했을 때 문제 없이 잘 되다가 어느순간 부터 갑자기 build를 할 때마다 에러가 발생했다. 아래는 JDK 17.0.7 / springboot 3.1.2 버전의 환경에서 spring web, lombok dependency만 추가하여 프로젝트를 생성 후 build를 했을 때 발생한 에러다. 가장 문제인 에러 메세지는 Caused by: java.lang.IllegalStateException at DefaultMockitoPlugins.java:104 이 메세지 같았다. 구글에서 정말 많이 찾아봤는데 동일한 에러메세지를 가진 사례를 찾기 어려웠다.. Mockito dependency라서 테스트와 관련성이 있을 것이라 판단하고, build.gradle에서 task.nam..

SpringBoot 2023.07.22

Spring Boot(RestTemplate)

RestTemplate RestTemplate은 Spring Framework에서 제공하는 HTTP 클라이언트 라이브러리이다. RestTemplate을 사용하여 다른 서버에 HTTP 요청 및 응답을 받아들이고, 이를 처리할 수 있다. RestTemplate은 간단한 API와 HTTP 메서드(GET, POST, PUT, DELETE 등)을 지원한다. 그리고 HTTP Header와 Query 매개변수를 설정하고, HTTP Body에 데이터를 처리할 수 있다. RestTemplate을 사용하기 전에 사용하고자 하는 클래스에 RestTemplate 객체가 필요하다. 아래와 같이 RestTemplateBuilder를 생성자를 통해 주입받아 멤버로 선언한다. (RestTemplateBuilder는 Bean으로 등록..

SpringBoot 2023.07.08

객체 지향 프로그래밍(추상 클래스)

추상 클래스 추상 클래스는 완성되지 않은 설계도(클래스)이다. 완성이 되지 않은 설계도이기 때문에 추상 클래스로는 인스턴스를 생성할 수 없으며, 자식에게 상속 후 자식 클래스에 의해서만 인스턴스를 생성할 수 있다. 추상 클래스를 만드는 목적은 여러 클래스에서 공통적으로 사용되는 변수나 메서드를 하나의 클래스에서 만들고 상속받으면 코드가 간결해지고, 비슷한 유형의 새로운 클래스를 만들더라도 추상 클래스를 상속받아 간단하게 클래스 생성을 할 수 있기 때문에 재사용성이 높아진다. 또한 수정이 필요한 경우 추상 클래스만 수정하면 상속 받은 클래스들이 모두 적용되기 때문에 유지보수에도 용이하다. 추상 메서드에 포함될 수 있는 것은 생성자, 멤버 변수, 추상 메서드이며, 메서드가 추상이라는 것 외 일반 클래스와 같..

Java 2023.07.05

Spring Boot(Spring Data JPA)

Spring Data JPA Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 만든 하나의 모듈이다 (JPA를 추상화 한 Repository 인터페이스를 제공) Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 구현한 클래스를 통해 사용 Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스(SimpleJpaRepository)를 자동으로 생성한다. 아래와 같이 Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔되면 해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ‘Bean’으로 등록합니다. 즉, JpaRe..

SpringBoot 2023.07.04

Spring Boot(Spring Boot 환경에서 JPA)

build.gradle에서 dependencies를 추가해줘야 한다. // JPA 설정 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' application.properties : Hibernate 설정 ddl-auto create : 기존 테이블 삭제 후 다시 생성(DROP + CREATE) create-drop : create와 같으나 종료시점에 테이블을 DROP update : 변경된 부분만 반영 validate : Entity와 테이블이 정상 매핑되었는지만 확인 none: 아무것도 하지 않습니다. show_sql, format_sql, use_sql_comments 옵션은 Hibernate가 DB에 요청하는 모든 SQL..

SpringBoot 2023.07.03

Spring Boot(JPA)

JPA(Java Persistence API) JPA란 자바 ORM 기술에 대한 표준 명세이다. ORM(Object-Relational-Mapping)은 객체와 DB의 관계를 매핑해주는 도구이다. JPA를 배우기 이전에는 JdbcTemplate으로 SQL을 직접 작성 후 JDBC를 사용해서 실행 해주어야 하고, SQL의 결과로 받아온 데이터들을 객체에 담아서 전달해야했다. 그리고 SQL에 의존적이라 객체에 수정 사항이 있을 경우 SQL 작성 부터 응답 결과를 객체에 담는 부분까지 모두 수정해야했다. 위 그림과 같이 Java의 객체로 DB와 관계를 맺어 객체 데이터를 조회, 저장, 수정, 삭제를 할 수 있도록 도와주는 것이 JPA이다. JPA는 애플리케이션과 JDBC 사이에서 동작하며, JPA를 사용하면 ..

SpringBoot 2023.07.01