BE

서론 웹에 대해 아무것도 모를 때는 로컬에서는 실행되는 걸 확인했는데, 이걸 다른 사람이 확인하려면 나랑 똑같이 인텔리제이를 설치해서 실행해봐야 되는 건가 하는 의문이 있었다. 똑같은 환경을 구축하여 실행해도 되지만 Docker로 image를 만들고 run하면 정말 쉽게 로컬에 서버를 구축할 수 있다. 프로젝트 Jar 파일 만들기 jar 파일은 여러 개의 클래스 파일들과 관련 리소스 및 메타 데이터를 하나의 파일로 모아서 배포를 위해 만들어진 소프트웨어 패키지 파일 포맷이다. (jar은 zip으로 이루어진 압축 파일이다.) 대부분의 스프링부트 사용자들은 인텔리제이를 사용할 텐데, 오른쪽에 보면 Gradle이 보일 것이다. 눌러보면 Tasks -> build -> bootjar 이 보일 것이다. 클릭하자 ..
서론 우리 프로젝트에서 소셜 로그인으로만 로그인을 구현할 예정이고, REST가 아닌 flutter sdk를 이용한 로그인으로 구현하기로 정해서 REST에서의 카카오 로그인과 flutter sdk를 이용한 카카오 로그인의 차이가 뭔지 찾아보았다. REST api REST API의 방식은 우리 서버가 클라이언트와 카카오 서버 사이에서 받은 token으로 유저 정보를 가져오는 방식이다. 즉, 카카오에서 준 정보를 DB에 저장한다. Flutter SDK 하지만 flutter sdk를 이용하면 모바일은 카카오 서버에게서 유저 정보를 받고 받은 유저 정보를 우리 서버로 전달하는 식으로 진행된다. 즉, 카카오에서 준 정보는 모바일이 받고 그 정보를 모바일에서 서버로 던져주면 서버가 받아서 DB에 저장하는 방식이다. ..
· BE/Node.js
NPM (Node Package Manager) NPM이란 Node.js 프로젝트를 관리하는 필수적인 도구라고 생각하면 된다. 온라인 저장소 수많은 오픈소스 라이브러리와 도구들이 업로드되는 저장소이다. 필요한 라이브러리나 도구를 손쉽게 검색할 수 있고 Node.js의 인기와 함께 거대한 생태계를 보유하고 있다. 커맨드 라인 도구 프로젝트 관리를 위한 다양한 명령어를 제공한다. 1. 저장소에서 라이브러리, 도구 설치 2. 프로젝트 설정/관리 3. 프로젝트 의존성 관리 $npm init 프로젝트 디렉터리를 생성하고 해당 디렉터리 안에서 npm init 명령어를 사용하면 몇 번의 질문을 통해 package.json 파일을 만들어 준다. 이 파일은 앞에서 진행한 몇 번의 질문에 대한 답을 json 형식으로 저장..
의존관계 주입은 크게 4가지로 나눌 수 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다. "불변, 필수" 의존관계에 사용된다. 생성자가 1개만 있다면 @Autowired를 지정해주지 않아도 자동 주입된다! 수정자 주입 (setter 주입) setter라고 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존 관계를 주입하는 방법이다. "선택, 변경" 가능성이 있는 의존 관계에 사용한다. 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용한다. @Autowired의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하..
싱글톤 패턴이든 스프링 같은 싱글톤 컨테이너를 사용하든 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 그러므로 무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 상황이 심각해지니 조심하자 이런 식으로 StatefulService를 만들고 테스트를 실행해 보자. 사용자 A와 B가 10000원, 20..
일반적인 자바 프로그래밍 웹은 보통 여러 고객이 동시에 요청을 한다. 일반적인 자바 프로그래밍에서는 고객이 요청을 할 때마다 객체를 생성(new)한다. memberServiceImpl()을 리턴해주는 memberService 객체를 두 개 만들어서(new) 출력해보자. 각 memberService 객체를 보면 서로 다른 두 개가 생성이 된 것을 확인할 수 있다. 문제점 MemberService 객체를 생성할 때 MemberServiceImpl 객체만 생성하는 것이 아니라 MemberServiceImpl의 인자 값으로 넘겨준 memberRepository()에서의 MemoryMemberRepository() 또한 생성되기 때문에 고객의 요청이 들어올 때 마다 2개의 객체가 생성된다고 볼 수 있다. 트래픽이..
SOLID SRP : 단일 책임 원칙 (Single Responsibility Principle) OCP : 개방-폐쇄 원칙 (Open/Closed Principle) LSP : 리스코프 치환 원칙 (Liskov Substitution Principle) ISP : 인터페이스 분리 원칙 (Interface Segregation Principle) DIP : 의존관계 역전 원칙 (Dependency Inversion Principle) 단일 책임 원칙 (SRP) 한 클래스는 하나의 책임만 가져야 한다. -> 여기서 하나의 책임이라는 말이 애매한데, 문맥과 상황에 따라 클 수도 있고, 작을 수도 있다. 중요한 기준은 변경! 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이라고 보면 된다. ex) U..
객체를 사용하는 두 가지 방법 첫 번째 그림은 A가 B와 C를 직접 생성해서 사용하는 것이므로 A가 갑이라고 할 수 있다. 두 번째 그림은 A가 B와 C에게 요청을 해서 받아온 것을 setter()나 construct()로 주입하기 때문에 A가 을, B와 C가 갑이라고 할 수 있다. A에서 B나 C, X, Y, Z 등의 클래스를 요청을 하면 IoC 컨테이너에서 이를 넘겨주는데 이때 IoC 컨테이너는 스프링이라고 할 수 있다. IoC는 Inversion of Control 인데, 갑과 을 관계 즉, 개발자와 프레임워크의 관계가 역전되었다는 의미이다. 개발자 입장에서는 객체의 제어권이 컨테이너에 넘어갔다고 할 수 있다. A가 B와 C를 생성하여 라이프사이클을 관리하게 되면 결합이 강해지기 때문에 관리하기가 ..
aodtns
'BE' 카테고리의 글 목록 (2 Page)