일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 카카오
- spring boot
- @Autowired
- 시스템호출
- 카카오 코테
- OpenCV
- 해시
- 프로그래머스
- Spring
- C언어
- thymeleaf
- Nodejs
- 컴포넌트스캔
- git
- nestJS
- nestjs auth
- 가상면접사례로배우는대규모시스템설계기초
- 구조체배열
- nestjs typeorm
- 카카오 알고리즘
- C++
- 코테
- 파이썬
- TypeORM
- python
- 알고리즘
- AWS
- 코딩테스트
- @Component
- 스프링
- Today
- Total
목록전체 (333)
공부 기록장 💻
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 빈과 의존 관계 스프링에서 Controller가 Service에 접근하고, Service가 Repository 를 통해 데이터베이스 혹은 내부 메모리에 접근하기 위해서는 아래와 같이 스프링 컨테이너에 의해 관리되는 자바 객체인 스프링 빈에 Controller, Service, Repository를 등록해주어야 한다. 참고로, 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤으로 등록한다. (유일하게 하나만 등록해서 공유한다는 의미이다.) 따라서 같은 스프링 빈이면 모두 같은 인스턴스이다. 회원 컨트롤러가 회원 서비스, 그리고 회원 레포지터리를 사용할 수 있게 의존 관계를 준비해보자. 우선 회..
보호되어 있는 글입니다.
테스트 코드를 작성하는 방법은 다양한데, 많은 사람들이 'Given-When-Then' 패턴과 'F.I.R.S.T' 전략을 소개해보고자 한다. Given-When-Then 패턴 Given-When-Then 패턴은 테스트 코드를 표현하는 방식 중 하나로, 다음과 같은 단계를 설정하여 각 단계의 목적에 맞게 코드를 작성한다. Given 테스트를 수행하기 전에 테스트에 필요한 환경을 설정하는 단계로, 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의한다. When 테스트의 목적을 보여주는 단계로, 실제 테스트 코드가 포함되며 테스트를 통한 결괏값을 가져오게 된다. Then 테스트의 결과를 검증하는 단계로, 일반적으로 When 단계에서 나온 결괏값을 검증하는 작업을 수행한다...
프로그램을 개발 할 때, 각 메서드를 테스트하기 위한 테스트 케이스를 작성하는 것은 거의 필수적이라 할 수 있다. IntelliJ IDEA에서 Test Class를 만드는 shortcut 단축키 (Ctrl + Shift + T) 기능을 살펴보자. 아래와 같이 MemberService라는 이름의 회원 서비스 클래스 위에서 more actions 를 클릭하면 아래와 같이 Create Test 라는 기능이 목록에 포함되어 있다. 이를 누르면 선택된 클래스에 대한 test case 메서드를 포함하는 클래스를 만들어 준다는 설명이 나타나 잇다. Ctrl + Shift + T 단축키를 누르는 방법도 있다. 그러면 다음과 같이 Testing Library, Class name, Destination package, ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 회원 서비스 개발 회원의 Domain과 Repository를 활용하여 비즈니스 로직 역할을 하는 회원 서비스를 작성해보자. Repository에는 직접 DB에 회원 정보를 저장하거나 어떤 특정 값을 이용해 회원을 찾는 등의 save(), findById(), findByName(), findAll() 등의 메서드를 포함하고 있었다. Service에는 보다 비즈니스적 로직을 갖는 메서드들을 작성하게 된다. Repository에는 조금 더 기계적인, DB에 단순하게 접근하도록 하는 메서드 이름을 지었던 반면, Service에 포함될 메서드의 경우 조금 더 비즈니스에 의존적인 이름을 짓게 된다. 회원 이름 중복이 되지 않..
클린 코드 에 의하면, 하나의 메서드가 하나의 기능만 구현하도록 코드를 명료하게 작성해야 한다. Java에서 메서드를 작성할 때, 길이가 길어지며 여러 기능이 포함되는 경우 하나의 기능을 하는 작은 단위를 다른 메서드로 분리할 필요가 있다. 다음의 회원 가입 예제를 살펴 보자. join() 메서드 내에서는 현재 같은 이름이 있는 중복 회원이 생기는 것을 방지하기 위한 두 줄의 코드가 포함되어 있다. 이 때 우리는 해당 코드를 "가입하려는 회원 member과 동일한 name 을 갖고 있는 회원이 데이터베이스에 있는지 확인" 하는 기능을 담당하는 메서드로 따로 추출하고자 한다. 따로 메서드로 분리하려는 코드를 드래그하면 다음과 같이 Extract method 기능이 나타난다. 단축키는 Ctrl + Alt +..
반환 값을 가지는 메서드를 다른 곳에서 호출하게 되는 경우, 리턴값을 받기 위한 지역 변수를 선언해야 하는데 IntelliJ IDEA에서 이를 자동적으로 실행해주는 단축키를 제공하고 있다. 아래와 같이 회원 가입 메서드인 join() 에서 회원 가입하고자 하는 member 의 name을 가진 회원이 데이터베이스에 저장되어 있는지 확인하는 memberRepository의 findByName() 을 호출하는 코드가 첫 줄에 작성되어 있다. (findByName() 메서드는 Optional 객체를 반환하는 메서드이다.) 객체를 받아 이것이 null 값인지, 또는 member 객체 값을 갖고 있는지 확인하기 위해 Optional 변수에 담아주어야 하는 상황이다. 이때, 해당 메서드가 반환형을 갖고 있는 메서드이..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 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" 와 ..
클래스 내에서 getter와 setter을 어떻게 빠르고 쉽게 만들 수 있을까? 결론부터 말하자면 Alt + Insert 단축 키를 통해 빠르게 getter, setter 관련 메서드를 생성할 수 있다. 다음과 같이 Hello 라는 정적 클래스 내에 name이라는 String 변수를 만들었다. Alt + Insert 단축키 클릭 시 다음과 같이 자동으로 Generate 가능한 생성자, 메서드 들이 나타난다. Getter and Setter을 선택해보면 다음과 같이 나타난다. 이를 클릭하고 나면 아래와 같이 자동적으로 name 변수에 대한 getter, setter 메서드인 getName(), setName()이 자동적으로 추가된다. 이번에는 int형 number 변수를 선언한 뒤 getter와 sette..
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 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..
클린 코드(Clean Code) 1장 정리 1장, 깨끗한 코드 이 책은 좋은 프로그램 작성 요령을 설명하는 책으로, 코드를 최대한 다양한 각도에서 살펴본다. 책을 읽고 나면, 좋은 코드와 나쁜 코드를 구분하고, 좋은 코드를 작성하며, 나쁜 코드를 좋은 코드로 바꾸는 실력을 쌓을 수 있게 될 것이다. 코드가 존재하리라 코드보다는 모델이나 요구사항에 집중해야 하지 않을까? (AI가 코드를 직접 작성해주고, 더 나은 코드 작성 방안도 알려주는 시대인데 말이다. 최근에 등장한 ChatGPT의 위력은 정말 대단하다고 느끼긴 했다.) 코드를 자동으로 생성하는 시대가 다가오고, 코드의 종말이 코앞에 닥친 것은 아닐까. 저자는 아니라고 한다. 코드는 요구 사항을 상세히 표현하는 수단으로, 코드의 도움 없이 요구사항을 ..
인턴 4일차, 회사 생활을 하며 무수하게 많은 코드를 읽는 시기가 언젠가는 오지 않을까 싶다. 내가 작성한 코드가 아닌 다른 누군가가 작성한 코드를 말이다. 둘째 날 선배님께서 읽어보라며 주신 클린 코드(Clean Code) 개발 서적을 틈틈히 읽어 보려고 한다. 현재 배정된 부서 팀에서 Java Spring Boot 를 이용한 백엔드 개발이 진행된다고 하여, 마침 클린 코드 를 읽는 것이 앞으로 업무를 배워 나가는데 있어 Java 코드들을 잘 이해하고(꼭 Java 언어가 아니더라도), 새로운 개발 업무를 맡게 될 때 읽기 좋은 쉬운 코드를 작성하는데 큰 도움이 되지 않을까 싶다. 우아한 테크코스 프리코스를 참여하면서도 가독성이 좋은 깨끗한, 효율적인 코드를 작성하는 방법에 대해 찾아본 바가 있지만, 사..