전체 글 63

Dependency Injection(의존성 주입 - DI)란?

NestJS 공부할 때부터 접하던 개념인데 이번에 Spring을 공부하면서 제대로 짚고 넘어가야겠단 생각이 들었다. Dependency Injection 만약 A 객체가 B 객체의 변화에 영향을 받는다면 A는 B를 의존한다고 한다. 예를 들면 아래와 같다. public class UserService { private final UserRepository users = new MemoryUserRepository(); ... } 위의 UserService는 MemoryUserRepository를 의존한다고 할 수 있다. MemoryUserRepository가 변한다면, 결국 UserService도 변화하게 되는 것이다. 소프트웨어 엔지니어링에서 의존성 주입이란 하나의 객체가 다른 객체의 의존성을 제공하는..

Dev 2022.05.07

Spring Bean 등록하기 - 2가지 방법

Spring Bean 등록 1. 컴포넌트 스캔 원리 @Component annotation 이 있으면 스프링 빈으로 자동 등록됨. Component Scan 은 ComponentScan annotation 가 붙은 package의 하위 package 들을 대상으로 살핀다. (SpringBootApplication annotation 내부에 ComponentScan annotation 존재) 다음 annotation 들은 @Component annotation 가 등록되어있다. @Controller @Service @Repository 스프링은 spring container에 spring bean을 등록할 때, 기본으로 싱글톤으로 등록한다 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. (설정으로 싱글톤..

Backend/Spring 2022.05.03

Spring 프로젝트 실행 - with Intellij (from WSL)

이전 포스트에서 Spring 프로젝트를 생성하고 실행까지 해봤었는데, Spring Boot 프로젝트 생성하기(WSL) - Spring Initializr Spring Boot 프로젝트 생성하기(WSL) - Spring Initializr Spring Boot를 공부하기 위해 알아보던 중 프로젝트를 쉽게 시작할 수 있게 도와주는 도구가 있다는 것을 알게 되었다. Spring Initializr https://start.spring.io/ spring에서 제공하는 웹 도구인데, 원하는 설. hou27.tistory.com 생각보다 환경설정하는 과정에서 간단하게 마무리되지 않아 구글링하며 해결한 문제를 잊지 않기 위해 추가로 포스트를 작성하려 한다. 위 사진처럼 Intellij 우측 상단의 환경설정이 추가되지..

Backend/Spring 2022.05.01

Spring Boot 프로젝트 생성하기(WSL) - Spring Initializr

Spring Boot를 공부하기 위해 알아보던 중 프로젝트를 쉽게 시작할 수 있게 도와주는 도구가 있다는 것을 알게 되었다. Spring Initializr https://start.spring.io/ spring에서 제공하는 웹 도구인데, 원하는 설정을 해준 후 GENERATE 버튼을 누르면 해당 설정으로 생성된 스프링 프로젝트 압축 파일을 받을 수 있다. 위와 같이 간단하게 gradle 프로젝트를 설정해주고, 압축파일을 다운받았다. 해당 파일을 압축해제한 후 wsl의 작업공간에 옮기고 사용할 IDE인 intellij로 열어주었다. wsl로 옮겨주었기 때문에 에러가 발생하는데, setting 창을 열어 WSL에 설치된 java를 선택해주었다. (추가로, Build and run using, Run te..

Backend/Spring 2022.05.01

EDA ( Exploratory Data Analysis ) - 탐색적 데이터 분석

데이터를 분석할 때 첫 단계로 대부분 탐색적 데이터 분석(EDA)을 하라고 한다. EDA 탐색적 데이터 분석(Exploratory Data Analysis) EDA는 탐색적 데이터 분석을 말한다. 이는 데이터 분석 과정에 대한 개념으로, 데이터를 분석하고 결과를 산출하는 과정에 있어서 여러 방면으로 해당 데이터에 대한 '탐색과 이해'를 기본으로 해야 한다는 것이다. 초기 Raw Data를 파악할 때부터 데이터를 잘 파악하고, 다각도로 분석해보며 유의미한 데이터를 만드는 것이 상당히 중요하다. 그렇게 데이터를 정확히 파악해야만 데이터를 통해 문제 해결을 할 수 있게 된다. ​실습을 위해 https://www.kaggle.com/ Kaggle: Your Machine Learning and Data Scie..

Data Science 2022.04.28

Github Copilot 설정하기

https://github.com/github/copilot-docs GitHub - github/copilot-docs: Documentation for GitHub Copilot Documentation for GitHub Copilot. Contribute to github/copilot-docs development by creating an account on GitHub. github.com 군 복무 중 깃허브의 copilot이란 것을 신청했던 것이 갑자기 기억나 waitlist를 확인해보니 이미 사용 가능한 상태였다. 그래서 바로 사용해보고자 한다. Copilot ? Github Copilot이란 Github와 OpenAI가 공동으로 개발한 인공지능 툴이다. 이 툴은 작성 중인 코드를 인공지..

Dev 2022.04.25

NestJS - JWT을 사용한 사용자 인증 ( with graphql )

NestJS를 사용한 백엔드에서 jwt 토큰으로 인증을 진행할 때 어떻게 구현해야할까? 지금부터 알아보도록 하겠다. 우선 구현에 앞서 몇몇 코드를 살펴보고 가자. Backend 서버는 graphql api를 사용하였으며, 공식문서를 참고하였습니다. https://docs.nestjs.com/security/authentication#implementing-passport-strategies Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is..

Backend/NestJS 2022.04.24

Refresh Token - JWT

사용자를 인증하는 부분은 거의 모든 서비스에서 가장 중요하다고 할 수 있을 정도로 핵심적인 부분이다. 사용자를 인증하는 방법 중 하나인 JWT 기법과 함께 refresh token라는 장치에 대해 알아보고 구현해보도록 하겠다. JWT JWT란, JSON Web Token의 약자로, 사용자 인증을 위해 사용하는 암호화된 토큰을 의미한다. 기본적으로 JWT는 ' . ' 으로 구분되어 header, payload, signature 3파트로 나뉜다. 11111111111.22222222222222.333333333333 예를 들면 위와 같은 형식인 것이다. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoienhjengiLCJzdWIiOjE4LCJpYXQiOjE2NDkwN..

개발 일지 2022.04.04

address already in use 에러 해결하기 ( awk와 함께 )

Node.js와 함께 작업하다보면 가끔 Error: listen EADDRINUSE: address already in use :::[Port] 이런 에러를 만날 때가 있다. 이는 비정상종료로 인해서 해당 포트가 점유되고 있어 사용할 수 없을 때 나타나는 에러이다. 평소 우리는 이 에러를 해결하기 위해 kill 명령어를 통해 해당 프로세스를 죽여서 해결하곤 했는데, 그 프로세스를 죽이기 위해선 PID 정보가 필요하다. 위와 같이 PID 정보를 확인해야 그제서야 kill -9 [PID] 를 통해 죽일 수 있었는데, 매번 그 과정이 너무 귀찮아서 생각하던 중 awk가 떠올랐다. awk awk란 pattern scanning and processing language이다. 파일의 각 열을 읽어 데이터를 원하는..

Dev 2022.04.02

KakaoLink API(카카오로 링크 공유하기) in React

Kakao에서 제공하는 메시지 API는, 사용자가 카카오톡 친구에게 카카오톡 메시지를 보내는 기능을 제공한다. https://developers.kakao.com/docs/latest/ko/message/common Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 위 기능을 통해 서비스의 접근성을 높이고, 공유를 통해 쉽게 전파되는 효과를 예상했다. 메시지를 보내는 방법은 크게 2가지인데, 1. 카카오링크 API를 사용하는 방법 2. 카카오톡 메시지 API를 사용하는 방법 이렇게 2가지이다. 필자는 첫 번째 방법을 택했다. 그 이유는 위 표에서 ..

개발 일지 2022.03.29