백엔드 45

좋은 객체 지향 설계의 원칙(SRP/DIP/OCP)

SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클라이언트 객체는 실행하는 책임만 담당해야 한다. DIP 의존관계 역전 원칙 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다. -> AppConfig를 이용하여 객체 인스턴스를 클라이언트 코드 대신 생성하여, 클라이언트 코드에 의존관계를 주입함. OCP 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성 사용, 클라이언트가 DIP를 지킴 애플리케이션을 사용 영역과 구성 영역으로 나눔 소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀 있다.

백엔드 2021.12.27

회원 도메인과 리포지토리 만들기 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

멤버 레포지토리 패키지에 MemberRepository Interface를 생성하고, MemoryMemberRepository.class에서 MemberRepository의 Interface를 implements하여, 구현하였다. 메모리 구현체 예시 package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository{ private static Map store = new HashMap(); private static long sequence = 0L; @Override public M..

백엔드 2021.12.18

인텔리제이(IntelliJ) 단축키 정리

스프링 강의를 듣는 도중 좋은 단축키가 많이 나오길래, 단축키를 정리해보았다. getter/setter 단축키 - Alt + Insert 이동 줄이동 Alt + Shift + ↑↓ 한줄 아래로 복붙 Ctrl + d 코드 한 줄 삭제 Ctrl + y 파일 가장 위, 아래로 이동 Ctrl + Home, End 자동완성 괄호안에서 ;로 코드완성하기 Ctrl + Shift + Enter 변수 추출하기 Ctrl + Alt + v 생성자,Getter와Setter,메서드 오버라이딩 자동완성 Alt + Insert 자바클래스 main메서드 자동생성 main + Tab System.out.println(); 자동완성 메인메서드안에서 sout + Tab System.out.printf(“”); 자동완성 메인메서드안에서 s..

백엔드 2021.12.18

정적 컨텐츠 / MVC와 템플릿 엔진 / API 란? - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

오늘은 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 정적컨텐츠, MVC와 템플릿 엔진, API에 대해서 정리해보고자 한다. 1. 정적 컨텐츠(서버에서 파일을 그대로 웹브라우저에 전달) 정적 컨텐츠란, 서버에서는 파일을 그대로 웹 브라우저에 보내 주는 방식을 의미한다. 이전에 설명한 Welcome Page와 같다고 볼 수 있다. 웹 브라우저에서 localhost:8080/hello-static.html 로 요청하면 내장 톰캣 서버가 해당 요청을 받는다. 톰캣 서버는 먼저 스프링 컨테이너에 hello-static.html요청이 왔음을 알린다. 스프링 부트에서는 ''컨트롤러''가 우선순위가 있기 때문에, 가장 먼저 컨트롤러 중에 hello-static.htm..

백엔드 2021.12.18

무상태성 / JWT / Oauth란?

무상태성(stateless): 시스템이 현재의 상태를 나타내는 데이터를 보유하지 않고, 단지 입력 내용에 따라 출력 내용이 결정되는 방식을 의미합니다. 세션을 통한 인증의 경우) 클라이언트, 서버, 세션 저장소가 사용자의 정보를 가지고 있다는 것은 상태성을 가지고 있음 → 원래 무상태성을 기초로 해야함. 즉, 무상태성을 지니는 시스템은 같은 입력에 대해 언제나 같은 출력을 하게 됩니다. REST API는 서버로의 요청(reqeust)이나 클라이언트로의 응답(response)이 모두 무상태성입니다. Request Header 활용하기 Request Header: 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더 client - Server - DB 로그인 하려면 이런식으로 로그인 요청(클라이언트에서 서버..

백엔드 2021.11.21

RESTful 설계 방법 / Validation / Server to Server

RESTful한 설계방법은 다음과 같다. 1. URI에는 명사 사용하고, 동사 사용은 지양해야 한다. 2. 언더바, 대문자는 사용하지 않는다. (소문자 지양) 3. 슬래시를 통해서 계층관계를 나타낸다. 4. 메소드는 실제 DB에서 동작하는 기준으로 정한다. 5. Delete보다 Patch가 더 적합하다. 5번에 대한 예시로는 데이터에 대해서, isDeleted N -> Y로 update가 더 낫고, 삭제는 지양해야 한다. 대부분의 데이터에 경우 업데이트를 통해 상태값만 바꾸고 실제로는 DB에 값이 남아있는 경우가 많다고 한다. 예시) RESTful한 URI 예시 GET /students/:studentId/subjects Validation이란 무엇일까? Validation: 사용자 요청이 서버로 들어왔..

백엔드 2021.11.14