전체 글 112

자바, JSP, 스프링, 스프링부트란?

최근 자주 언급되는 언어부터 프레임워크까지 개념 정리를 하고 넘어가고자 한다.이를 주로 사용하는 백엔드 개발자가 되기 위해선 꼼꼼히 정확하게 이해해보자 🌱 Java public class JavaProject { // Java를 처음 접하면서 보게되는 코드 public static void main(String[] args) { System.out.println("Hello World"); } }객체지향적 프로그래밍 언어스프링의 근간이 되는 언어(한글)스프링은 자바 뿐 아니라 코틀린, 그루비로도 사용할 수 있으나 여기서는 자바로 진행스프링 자체도 거의 대부분 자바로 만들어져 있음 JSP (Java Server Page)자바로 프론트엔드를 엮어서 사용하는 개념프론트와 백이 모두 JAVA를 사용해서 페이지를..

프레임워크와 라이브러리의 차이점

프레임워크와 라이브러리는 개념이 비슷하여 자주 혼동되어 사용된다.나 또한 2단어는 수없이 들어왔지만 “두 개념의 차이점을 설명해봐!”라고 하면 고민됐던 단어이다.이번 기회에 정확하게 짚고 넘어가서 앞으로는 제대로 설명할 수 있어야겠다. 🌱 ✨프레임워크와 라이브러리 개념정리프레임워크“뼈대”, “기반구조”로 제어의 역전(DI)가 적용된 기술즉, “소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합” 라이브러리단순 활용가능한 도구들의 집합개발자가 만든 클래스에서 호출하여 사용, ✨그러면 둘의 차이점은?“제어 흐름에 대한 주도성이 누구에게/어디에 있는가” 즉, “어플리케이션의 흐름을 누가 쥐고 있느냐”에 따라 사용하는 언어가 다르다.쉽게 설명하자면, “떡볶이”를 만든다고 해보자. ..

Filter & Interceptor

Exception Handling에 대해 공부하던 중, Spring에서 Controller까지 요청/응답이 이동하는 과정에 대해 고민하게 됐다. 그 과정에서 Filter와 Interceptor에 대한 지식이 부족함을 깨닫고 이를 보완하고자 포스팅을 작성한다. 🌱 Spring에서 Filter와 Interceptor를 사용하는 이유FilterFilter Method 종류InterceptorInterceptor Method 종류Filter vs InterceptorSpring에서 Filter와 Interceptor를 사용하는 이유개발을 주로 하다보면, 공통적으로(중복적으로) 처리해야되는 업무들이 많다. 공통 업무와 관련된 코드들이 페이지마다 존재한다면, 중복 코드가 많아지고 서버에 부하를 줄 수도 있고 소스 ..

Dispatcher Servlet이란?

Spring을 공부하면 꼭 나오는 주제 “Dispatcher Servlet”본격적으로 프로젝트와 공부를 병행하다보니, Controller가 Clinet의 요청을 전달받고 Server로부터의 응답을 반환하는 연결다리임은 알았지만 그 과정이 어떻게 진행되는지 몰랐었다. “왜 Spring은 이렇게 작동할까?”하는 의문이 계속해서 생겨났고, Dispatcher Servlet도 그 궁금중 중 하나였다. 이번 포스팅을 통해 정확히 그 과정을 이해하고 넘어가고자 한다. 🌱 Dispatcher Servlet이란?Spring은 왜 Dispatcher Servlet을 사용할까?Dispatcher Servlet의 동작 과정1) 클라이언트의 요청을 Dispatcher Servlet이 받음2) Handler Mapping : ..

패스트캠퍼스X야놀자: 백엔드 개발 부트캠프 - Toy#2 여행 여정을 기록, 관리하는 서비스

서비스 개요서비스 목적 및 목표서비스 설계패키지 구조요구사항 분석ERD 설계서비스 기능기능설명입출력화면역할 분담팀 협업개인공부 정리Trouble Shooting 🚀1. DB 설계 수정2. JPA 연동 3. 팀 협업 (스케줄링)프로젝트를 마무리하며 .. 🐣서비스 개요서비스 목적 및 목표목적여행 여정을 기록과 관리하는 SNS 서비스를 만든다.목표여행의 여정 정보를 기록하고 조회하는 Spring Boot 기반 RESTful API 를 개발한다.진행한 여행, 여정 정보를 조회, 등록 수정하기 위한 ERD 설계 및 개발한다.여행과 여정 정보를 조회, 등록, 수정하기 위한 RESTful API 설계/개발한다.진행한 여행, 여정 정보를 조회, 등록 수정 후 저장한다.일정 정보에 위치 정보를 확인 및 추가하는 공통 유..

JPA 상속 관계 매핑

JPA를 프로젝트에 적용하면서 JPA 상속 관계 매핑이 왜 필요하고, 어떤 관계를 어떻게 매핑해야하는지 공부했었다. JPA를 공부하는 단계에서 상속 관계 매핑이 되게 어렵게 다가왔지만, 공부하면서 앞으로 DB 설계시 필수적으로 배워야함을 깨닫게 됐다. 이를 잘 정리하여 프로젝트의 성격과 규모에 따라 필요한 상속 방법을 선택해야겠다. 🌱 JPA 상속 관계 매핑이란?설계 요구사항 (DB 설계 계획)상속 관계 매핑 전략0. JPA에서 매핑시 필요한 Annotation1. JOINED전략을 사용하는 case 🚀 JPA N+1 문제를 해결하는 방법2. Single Table 전략을 사용하는 case3. TABLE PER CLASS 전략을 사용하는 case4. Itinerary Entity 에 Accommodati..

@Builder란?

Lombok 라이브러리의 @Builder 어노테이션은 정말 많이 사용하는 어노테이션이다. 항상 생성자 자체를 사용하기 보단 @Builder을 사용해서 생성자를 만들곤 했다. 하지만 사용하면서도 Builder의 패턴이나 사용이유에 대해 깊게 생각하지 못하고 넘어갔던 것 같아 정리하고자 한다. 이번 기회에 공식문서 읽는 습관도 들여야겠다. 🌱 @Builder와 일반 객체 생성의 차이점 Telescoping Constructor Pattern (점층적 생성자 패턴)Java Beans Pattern (자바 빈 패턴)정리 | 기존 생성자 패턴 ↔ 빌더 패턴1️⃣ 생성자는 파라미터가 많을 경우 가독성이 좋지 않다.2️⃣ 불필요한 매개변수의 값까지 지정해줘야 한다.3️⃣ 매개변수의 순서가 바뀌면 에러가 난다.@Bui..

MariaDB + JPA 연동

이번 Toy project #2에서는 Spring Boot, JPA, MariaDB를 연동해서 프로젝트 설계를 진행했다. 그 과정을 정리하여 다음 프로젝트를 대비하고자 한다. 🌱Spring Boot + JPA + MariaDB 1. MariaDB 설치2. MariaDB 공식 홈페이지의 다운로드 페이지 접속3. 버전, OS, 시스템 종류, 패키지 설정 후 Download4. 다운로드한 msi 파일 실행5. 사용자 환경 설정6. 데이터베이스 설정7. 설치 완료8. dependency 설정9. application.yaml🚀 Trouble Shooting10. MairaDB 접속 방법Spring Boot + JPA + MariaDB 1. MariaDB 설치2. MariaDB 공식 홈페이지의 다운로드 페이지 접..

올바른 URI 설계 - Path Variable 과 Query Parameter

Toy Project #2에서 CRUD API를 만들면서 모든 매개변수를 @RequestParam으로 받았었다. 그렇게 개발한 내용을 PR로 올렸고 돌아온 코멘트를 통해 @RequestParam과 @PathVariable의 차이점에 인지하게 됐다. 그 둘의 차이점을 이번 기회를 통해 명확히 이해하고 올바른 URI 작성법을 공부해야겠다. 🌱 Query Parameter ‘?’ 뒤의 변수에 값을 담아 백엔드에 전달하는 방식 /api/itineraries?tripId=1 // Fetch a itinerary which has tripId of 1 언제 사용하는가? 정렬이나 필터링을 할 경우 선택적인 매개변수로 사용될 경우 매개변수가 많을 경우 /users?occupation=programer # 프로그래머인 ..

@Controller vs @RestController

@Controller@Controller로 View 반환하는 case 전통적인 Spring MVC의 @Controller는 주로 View(화면)을 반환하기 위해 사용한다. Client가 URL형식으로 CRUD와 같은 요청을 보낸다.DispatcherServlet이 요청을 위임할 Handler Mapping을 찾고 이를 통해 요청을 Controller에 위임한다.Controller는 요청을 처리한 후, View Name을 Handler Adapter에게 반환하고 이를 DispatcherServlet에게 반환한다.DispatcherServlet은 View Resolver를 통해 View Name에 해당하는 View를 찾아 Client에게 반환한다. @Controller로 Data 반환하는 case 하지만, ..