일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- @Component
- 카카오
- 시스템호출
- 코테
- nestjs typeorm
- 알고리즘
- spring boot
- thymeleaf
- C언어
- 가상면접사례로배우는대규모시스템설계기초
- 코딩테스트
- nestJS
- 카카오 알고리즘
- 구조체배열
- 파이썬
- 카카오 코테
- python
- git
- 컴포넌트스캔
- Nodejs
- @Autowired
- AWS
- TypeORM
- 스프링
- Spring
- C++
- 프로그래머스
- 해시
- OpenCV
- nestjs auth
- Today
- Total
목록# Tech Studies (126)
공부 기록장 💻
프로그램을 개발 할 때, 각 메서드를 테스트하기 위한 테스트 케이스를 작성하는 것은 거의 필수적이라 할 수 있다. 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 언어가 아니더라도), 새로운 개발 업무를 맡게 될 때 읽기 좋은 쉬운 코드를 작성하는데 큰 도움이 되지 않을까 싶다. 우아한 테크코스 프리코스를 참여하면서도 가독성이 좋은 깨끗한, 효율적인 코드를 작성하는 방법에 대해 찾아본 바가 있지만, 사..
vscode, intellij 등 프로젝트 실행을 편리하게 해주는 도구와 IDE를 사용하다 보니 컴파일과 빌드의 개념에 대한 이해가 부족한 경우가 많다. 개발 생산성 향상을 위해 IDE 내에서 소스 코드를 작성하고 run을 실행하면 알아서 모든 과정이 자동으로 실행되기 때문이다. 컴파일과 빌드가 무엇인지와 그 차이점을 다시 이해해본 뒤, Spring boot Application 빌드 파일을 직접 생성하여 실행해보도록 하자. 빌드, 컴파일, 링크 1. 빌드 (build) 소스 코드 파일을 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정을 build 라고 한다. 빌드의 단계 중 컴파일 그리고 링크가 포함 되어 있으며, 컴파일과 링크 모두 빌드의 부분 집합이라 할 수 있다. 빌드 과정을 도와주는 도구를 ..
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 Spring Boot의 Welcome Page 정적 페이지 로드 기능 Spring Boot에서 Servlet Web applications 에서는 Static Content를 이용해 Welcome Page 정적 페이지를 띄우는 기능을 제공하고 있다. 다음의 공식 문서에서 자세하게 설명하고 있다. https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web Web Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and U..
Gradle은 의존 관계가 있는 라이브러리를 함께다운로드 하는데, Spring Boot에는 다음과 같은 핵심적인 라이브러리들이 있다. spring-boot-starter-web spring-boot-starter-tomcat: 내장 웹서버 톰캣 spring-webmvc spring-boot-starter-thymeleaf: 템플릿 엔진(view) spring-boot-starter(공통) : spring boot + core + logging spring-boot-starter-test junit 테스트 프레임워크 mockito 목 라이브러리 assertj : 테스트 코드 작성을 편리하게 돕는 라이브러리 spring-test: 스프링 통합 테스트 지원 라이브러리 기존에 spring boot 프로젝트를 새..
인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 JAVA SDK 17과 IntelliJ IDEA 설치 본격적으로 프로젝트 환경 설정을 하기에 앞서, Java SDK 17과 IntelliJ IDE (Community 무료 버전) 설치를 완료하였다. Spring Boot 프로젝트 초기화 및 생성 Spring Boot를 기반으로 스프링 프로젝트를 만들 것이기 때문에, https://start.spring.io/ 에서 만들어보자. 필요한 라이브러리를 관리하는 Tool로는 Gradle로 설정하고, Spring Boot 버전은 3.0.1을 선택하였다. (SNAPSHOT, M1 같은 미정식 버전 제외한 최신 버전) Project Metedata 부분에 Group은 hello,..
인턴 과정을 수행하며 Java Spring, Spring Boot에 대한 이해를 깊이 있게 해야 하기 때문에 자율 공부가 주어지는 시간에 인프런에서 제공하고 있는 김영한 님의 "스프링 입문 - 코드로 배우는 스프링 부, 웹 MVC, DB 접근 기술" 을 수강하며 필수적인 내용들을 정리해보고자 한다. 인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 본 강의의 강사는 우아한 형제들 개발 팀장을 맡고 있는 김영한 님이다. 스프링 완전 정복 로드맵의 첫번째 강의로, 스프링 학습의 제대로 된 첫 길잡이 역할을 하는 것이 본 강의의 목표이다. 다음과 같은 순서로, 실제 동작하는 간단한 웹 어플리캐이션을 개발해보자. 1. 스프링 프로젝트 생성 2. 스프링 부트로 웹 서버 실행..
"Do It! BERT와 GPT로 배우는 자연어처리" 1장 정리 학습 목표 모델 학습의 전체 파이프라인에 대해 알아보자. 해당 학습 파이프라인은 자연어 처리 모델이 수행하는 문서 분류, 개체명 인식, 질의응답, 문서 검색, 문장 생성의 5가지 과제에 상관없이 공통적으로 적용된다. 학습 파이프라인을 그림으로 나타내면 다음과 같다. 모든 실습은 ratsnlp 라는 오픈소스 파이썬 패키지를 사용하고, 패키지는 구글 Colab 환경에서 실습을 진행하게 된다. 1. 각종 설정값 정하기 모델을 만들기 위해선 가장 먼저 각종 설정값을 결정해야 한다. 어떤 pre-train model을 사용할 것인가? 학습에 사용할 데이터는 무엇인가? 학습 결과는 어디에 저장할 것인가? 하이퍼파라미터(hyperparmeter)란 모델..
"Do It! BERT와 GPT로 배우는 자연어처리" 1장 정리 학습 목표 해당 책에서 소개하는 자연어 처리 모델의 학습 방법은 전이 학습(Transfer Learning)이다. Pre-train, Fine Tuning 등 트랜스퍼 러닝과 관련된 개념을 이해해보도록 하자. Transfer Learning 트랜스퍼 러닝(Transfer Learning) 이란, 특정 태스크를 학습한 모델을 다른 태스크 수행에 재사용하는 기법을 가리킨다. 사람이 새로운 지식을 배울 때, 그간 평생 쌓아왔던 지식을 요긴하게 다시 써먹는 것과 같다. 아래와 같이 태스크 2를 수행하는 모델을 만든다고 가정해볼 때 트랜스퍼 러닝이 도움이 될 수 있다. 모델이 태스크 2를 배울 때 태스크 1을 수행했던 경험을 재활용하기 때문이다. T..
"Do It! BERT와 GPT로 배우는 자연어처리" 1장 정리 학습 목표 딥러닝 기반에 둔 자연어 처리 모델의 개념과 학습 방법을 살펴 보자. 기계의 자연어 처리 모델(model)이란 입력을 받아 어떤 처리를 수행하는 함수(function)라 할 수 있다. 아래 그림과 같이 모델의 출력은 어떤 사건이 일어날 가능성을 의미하는, 0과 1 사이의 값의 확률(probability)이라는 점에 주목해야 한다. 즉, 모델이란 어떤 입력을 받아 해당 입력이 특정 범주일 확률을 반환하는 확률 함수이다. 그렇다면, 자연어 처리 모델의 입력은 자연어, 즉 사람의 말이다. 이를 정리해보면 자연어 처리 모델은 자연어를 입력 받아 해당 입력이 특정 범주일 확률을 반환하는 확률 함수라고 할 수 있다. 예를 들어 영화 리뷰의 ..