일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코테
- 컴포넌트스캔
- spring boot
- 프로그래머스
- @Autowired
- 시스템호출
- 해시
- 알고리즘
- 파이썬
- TypeORM
- git
- nestjs auth
- thymeleaf
- C++
- Spring
- Nodejs
- OpenCV
- 코딩테스트
- C언어
- nestJS
- 스프링
- 카카오
- 가상면접사례로배우는대규모시스템설계기초
- AWS
- 카카오 코테
- python
- @Component
- 구조체배열
- nestjs typeorm
- 카카오 알고리즘
- Today
- Total
목록# Tech Studies/Java Spring • Boot (45)
공부 기록장 💻

인프런 - 스프링 핵심 원리 기본편 정리 그동안 설정(구성) 정보 클래스인 AppConfig에서 객체를 생성하고, 객체들 간의 의존 관계를 구성하며 주입하였다. 그리고 애플리케이션에서 사용하고자 하는 서비스는, AppConfig에서 생성한 서비스 객체를 참조하는 방식을 이용했다. Java Code를 통해 직접 DI를 주입했다면, 이번에는 스프링 컨테이너를 생성하고, 객체들을 스프링 빈으로 등록하여 스프링 컨테이너가 직접 객체들을 관리할 수 있도록 전환해보자. 본격적으로 스프링으로 전환을 해보도록 하자. 스프링 컨테이너의 계층 구조, BeanFactory와 ApplicationContext 우선 스프링 컨테이너의 계층 구조부터 살펴보자. 스프링 컨테이너의 상속, 계층 구조를 나타내면 다음과 같다. Bean..

인프런 - 스프링 핵심 원리 기본편 정리 회원, 주문과 할인 도메인을 설계하고 간단한 구현, 테스트를 해보았다. 고정 할인 정책에서, 새로운 정률 할인 정책이 등장함과 동시에, 객체 지향 원리를 적용하지 못한 기존 설계의 문제점을 파악하고 설계를 변경해 나가자. 그리고 좋은 객체 지향 설계의 원칙인 SOLID 원칙 중, 다음의 3가지 원칙을 적용해 나가는 과정을 이해해보자. 1. DIP (Dependency Injection Principle, 의존 관계 역전 원칙) - 구현체가 아닌 인터페이스에만 의존하도록, 외부에서 의존 관계를 주입하는 역할을 따로 분리하자. 2. OCP (Open-Closed Principle, 개방-폐쇄 원칙) - 클라이언트의 코드를 변경하지 않고, 구현체를 주입하는 외부의 코드..

인프런 - 스프링 핵심 원리 기본편 정리 회원 주문 서비스 예제의 회원 도메인을 설계하고 간단한 구현, 테스트를 해본 것에 이어 주문과 할인 도메인을 설계하여 구현해보자. 주문, 할인 도메인의 비즈니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원에는 일반, VIP 두 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP에게는 1,000원을 할인해주는 고정 금액 할인을 적용한다. (나중에 변경 가능성 O) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루는 상황이다. 최악..

인프런 - 토비의 스프링 부트 (이해와 원리) 참고 및 정리 Spring Boot 를 이용한 간단한 웹 MVC 개발을 해보며, 스프링 부트가 왜 만들어졌으며 스프링 프레임워크와의 차이점이 무엇이고 특징에는 무엇이 있는지 짚고 넘어가야 할 필요를 느껴 "토비의 스프링 부트 - 이해와 원리" 강의 소개 부분을 참고하여 Spring Boot가 정확히 무엇인지 정리해보고자 한다. 스프링 프레임워크란? 스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로, 간단히 스프링(Spring) 이라 불린다. 동적인 웹 사이트를 개발하기 위해 여러 가지 서비스를 제공하고 있으며, 대한민국 공공 기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기..

인프런 - 스프링 핵심 원리 기본편 정리 이전에 스프링 입문 강의에서 회원 예제를 만들어 본 회원 서비스 예제에서 확장되어, 이번에 학습하게 된 스프링 핵심 원리 강의에서 다루는 회원-주문 서비스 예제의 비즈니스 요구 사항을 정리하고, 간단하게 회원 Domain에 대한 Service를 만들어, Test를 진행해보자. 그리고 스프링의 핵심 원리를 이해해보도록 하자. 가장 먼저 https://start.spring.io/ 에서 Spring Boot 프로젝트를 생성해보자. 아래와 같이 기본적인 프로젝트 설정을 마치고, 메타데이터 또한 입력해주었다. 프로젝트의 식별자 이름은 hello, 이름은 core 이로 설정해주었다. Spring Boot 개발 환경 기본 정보는 다음과 같다. Project: Gradle -..

인프런 - 스프링 핵심 원리 기본편 정리 스프링의 핵심 컨셉은? 객체 지향 언어인 Java 기반의 프레임워크라는 점이다. 즉 객체 지향 언어가 가진 강력한 특징을 잘 살려내 좋은 객체 지향 애플리케이션을 개발할 수 있게 돕는 프레임워크라 할 수 있다. 그렇다면 좋은 객체 지향 프로그래밍이란? 객체들의 모임으로, 각 객체는 서로 메시지를 주고 받고, 데이터를 처리할 수 있다. 프로그램을 유연하고 변경이 용이하게 만든다는 특징을 지닌다. 이를 한 단어로 정의해보자면 다형성(polymorphism) 이다. 세상의 모든 것을 객체로 표현한다면, 객체를 역할(인터페이스)과 구현(클래스)으로 구분함으로써 새로운 기능을 기존 것의 변경 없이 추가를 용이하게 한다. 역할과 구현을 분리하자! 역할과 구현으로 구분하면 세..

1월 초부터 인프런에서 우아한 형제들 개발 이사를 맡고 계시는 '김영한' 님의 스프링 입문 강의를 수강하기 시작하여, 약 2주(실제 7일)동안 학습을 진행하며 드디어 완강을 하게 되었다. 그동안 학습했던 내용을 되짚어보며 간단하게 복습하며 아래에 정리해보고자 한다. 1. 프로젝트 환경 설정 및 생성 을 통해 IntelliJ IDEA와 기본적인 Java SDK 를 설치하고, Spring Boot 프로젝트의 초기 설정을 하여 생성하였다. Gradle 의 의존성 라이브러리들과 디렉터리 구조 살펴보기를 통해 build.gradle에 spring boot 프로젝트 생성 시 추가한 라이브러리와 사용할 테스트 프레임워크, 내장 톰캣 서버와 thymeleaft 템플릿 엔진의 의존성 등을 확인해 보았다. View 환경 ..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 AOP (Aspect Oriented Programming) 이란? AOP란, Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라 불린다. 쉽게 말해 어떤 로직을 기준으로 공통 관심 사항(corss-cutting concern)과 핵심 관심 사항(core concern) 으로 관점을 분리하여 보고, 이 관점을 기준으로 각각 모듈화하는 것을 말한다. AOP가 필요한 상황 아주 간단한 예를 들어, 이전에 작성했던 회원 예제에서 모든 메서드에 대한 호출 시간을 측정하는 시간 측정 로직을 추가한다고 가정해보자. 각 메서드의 시간 측정 로직을 수행하는 코드를 각 컨트롤러의 각 메서드, 서비스의..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 DB 접근 기술 시리즈 정리 1. 순수 JDBC 2. JdbcTemplate 3. JPA 4. Spring Data JPA Spring Boot와 JPA만 사용해도 개발 생산성이 매우 증가하며, 작성해야 할 코드도 확연히 줄어든다. 이제 Spring Data JPA를 사용하게 되면, repository에 구현 클래스 없이 Interface 만으로도 개발을 완료할 수 있다. 반복 개발해온 기본 CRUD 기능도 Spring Data JPA가 모두 제공하므로, 개발자는 핵심 비즈니스 로직을 개발하는데만 집중할 수 있게 된다. 실무에서 관계형 데이터베이스를 사용한다면 spring data jpa는 이제 선택이 아니라..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 DB 접근 기술 시리즈 정리 1. 순수 JDBC 2. JdbcTemplate 3. JPA 4. Spring Data JPA 지금까지 DB에 접근하기 위해 순수 JDBC API를 이용해보았고, 이후에 JDBC에서 중복되는 코드를 상당 부분 제거하여 만든 JdbcTemplate을 사용해보았다. JDBC, JdbcTemplate API 모두 개발자가 프로그램 내에서 sql문을 작성해야 한다는 공통점을 지녔지만, 이번에는 sql문까지 프레임워크 내에서 관리해주는 JPA에 대해 알아보자. JPA란? JPA(Java Persistence API) 는 Spring 내에서 만든 Model의 객체와 DB 테이블의 관계를 매핑..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 DB 접근 기술 시리즈 정리 1. 순수 JDBC 2. JdbcTemplate 3. JPA 4. Spring Data JPA 스프링 내부 메모리에 접근하여 데이터를 저장하는 MemoryMemberRepository, H2 Database에 JDBC API를 통해 접근하는 JdbcMemberRepository까지 작성해보았다. 이번에는 Jdbc API를 통해 SQL문을 실행하기 위한 코드를 일일히 작성하지 않고, 조금 더 간단하게 구현이 가능한 JdbcTemplate을 이용한 DB 접근 방법에 대해 알아보도록 하자. Spring JdbcTemplate 이란? 스프링 JdbcTemplate과 MyBatis는 실무에..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 그동안은 JVM 내에서만 Java Code를 돌리며 단위 테스트를 진행했다면, 이제 스프링 컨테이너와 DB까지 연결한 통합 테스트를 진행해보도록 하자. (그러나, 단위 테스트를 잘 만드는 것이 훨씬 더 좋은 테스트를 만든다는 것임을 잊지 말자!) 우선 연결되어 있는 h2 db의 모든 튜플을 삭제해주고, @SpringBootTest 기존의 MemberServiceTest 전체를 복사하여 MemberServiceIntegrationTest 라는 이름의 테스트 클래스를 만들자. Spring Boot 프레임워크 기반의 테스트 기능을 수행하는 @SpringBootTest 어노테이션을 추가하고, memberService와 me..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 DB 접근 기술 시리즈 정리 1. 순수 JDBC (현재) 2. JdbcTemplate 3. JPA 4. Spring Data JPA 지금까지 스프링에 회원 서비스를 예제로 만들 때, Map 을 이용하여 Java 내부 메모리를 임시 데이터 저장소로 사용하였다. 이제 외부 Database와 연결하여 데이터들을 저장하고 관리하도록 해보자. 우선 가장 간단하게 사용할 수 있는 브라우저 기반의 콘솔 모드를 제공하는 H2 Database에 대해 알아보고, 이를 설치하여 사용해보자. H2 database 란? H2 데이터베이스는 별다른 설치를 요구하지 않으며, 용량이 가벼워 개발용 로컬 DB로 사용하기 좋은 DBMS이다...

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 웹 MVC 개발 이제 회원을 등록(가입)하고 회원의 목록을 조회하는 웹 MVC 프로그램을 작성해보자. 이전에 스프링 부트에서 웹 브라우저가 내장 톰캣 서버를 통해 스프링 컨테이너에 접근하여 웹 페이지를 보는 방법을 다시 복습해보면 다음과 같다. 1. 먼저 controller에서 해당 경로로 매핑된 컨트롤러가 있는지 살펴본다. 2. 1번에서 찾지 못한 경우, static 디렉터리 내의 파일을 검색한다. (이때 경로가 "/" 인 경우는 index.html 파일을 전달) 이제 Home 화면(local 경로 "http://localhost:8080") 에 "회원 가입" 과 "회원 목록" 기능을 동작하도록 하는 링크를 생성하..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 빈과 의존 관계 스프링에서 Controller가 Service에 접근하고, Service가 Repository 를 통해 데이터베이스 혹은 내부 메모리에 접근하기 위해서는 아래와 같이 스프링 컨테이너에 의해 관리되는 자바 객체인 스프링 빈에 Controller, Service, Repository를 등록해주어야 한다. 참고로, 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤으로 등록한다. (유일하게 하나만 등록해서 공유한다는 의미이다.) 따라서 같은 스프링 빈이면 모두 같은 인스턴스이다. 회원 컨트롤러가 회원 서비스, 그리고 회원 레포지터리를 사용할 수 있게 의존 관계를 준비해보자. 우선 회..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 회원 서비스 개발 회원의 Domain과 Repository를 활용하여 비즈니스 로직 역할을 하는 회원 서비스를 작성해보자. Repository에는 직접 DB에 회원 정보를 저장하거나 어떤 특정 값을 이용해 회원을 찾는 등의 save(), findById(), findByName(), findAll() 등의 메서드를 포함하고 있었다. Service에는 보다 비즈니스적 로직을 갖는 메서드들을 작성하게 된다. Repository에는 조금 더 기계적인, DB에 단순하게 접근하도록 하는 메서드 이름을 지었던 반면, Service에 포함될 메서드의 경우 조금 더 비즈니스에 의존적인 이름을 짓게 된다. 회원 이름 중복이 되지 않..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 회원을 등록하고 조회하는 간단한 회원 관리 예제 백엔드 서버를 개발해보자. 단, 아직 데이터 저장소 (DB) 가 선정되지 않음을 고려한 가상의 시나리오를 배경으로 한 예제이다. 웹 어플리케이션의 기본 구조 우선 기본적인 웹 어플리케이션의 구조는 다음과 같이 도메인, 컨트롤러, 서비스, 리포지토리로 구성된다. Domain: 비즈니스 도메인 객체 (회원, 주문, 쿠폰과 같이 주로 DB에서 저장하고 관리하는 대상 객체) Controller : 웹 MVC의 컨트롤러, API를 만드는 경우 컨트롤러의 역할 Service : 핵심 비즈니스 로직 구현 (회원의 중복 가입 방지 로직 등) Repository: DB에 접근하여 도메..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링에서 웹 개발 방식에는 3가지가 있다고 하였는데, 첫번째는 정적 컨텐츠 (정적 파일을 그대로 전달), 두번째는 MVC와 템플릿 엔진 (model, view, controller로 분할하여 controller의 로직을 토대로 렌더링이 된 html 페이지를 전달), 세번째는 API (View 없이 HTTP의 Message Converter을 통해 json 스타일로 객체를 response body로 반환) 방식이다. 세번째 방식인 API 에 대한 이해를 해보자. @ResponseBody를 이용한 API - 문자열 전달 우선 Response Body에 간단하게 문자열을 전달할 수 있다. 리턴 값으로 "hello" 와 ..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 MVC와 템플릿 엔진 MVC 패턴이란 무엇인가? MVC란, Model, View, Controller을 줄인 말이다. 이전에는 정적 컨텐츠처럼, View에서 모든 개발을 진행하는 Model 1 방식을 사용했다. (JSP의 경우이다.) 지금은 MVC 패턴을 많이 사용한다. 비즈니스 로직과 데이터 베이스에 접근하는 개발을 모두 화면을 담당하는 부분에서 코드를 작성하게 되면 유지보수의 어려움이 굉장히 커진다. 따라서 현재 실무에서는, 각자의 역할과 책임에 맞게 관심사를 분리하여 MVC와 같은 패턴을 이용한 개발이 주로 이루어지고 있다. 예를 들자면, View는 화면에 그리는데 집중해야 하며, Controller와 Mode..

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 웹 개발 방식 웹을 개발하는 방법에는 3가지가 있다. 1. 정적 컨텐츠. 파일을 그대로 웹 브라우저로 전달하는 방법 2. MVC와 템플릿 엔진. Model, Controller, View 템플릿 엔진 화면을 통해 서버의 어떤 프로그램으로 HTML을 동적으로 변형하여 로드. 3. API. Android, iOS, Vue, React 등의 클라이언트 또는 다른 서버와 json 포맷을 통해 데이터를 주고 받는 방식. 위의 방법 중, 1번에 해당하는 정적 컨텐츠 기능을 Spring Boot 프로젝트에서 확인해보자. 정적 컨텐츠 스프링 부트는 정적 컨텐츠 기능을 제공한다. 이전에 Thymeleaf 템플릿 엔진을 이용한 Vie..