Java 14

백엔드 개발자 자바, 스프링 질문 완전정복

중점 - 얼마나 진정성을 가지고 개발자를 준비해왔는가, 본인 스스로 노력한 게 있는가? (토이 프로젝트, 블로그 정리 등) - 프로젝트 끝나고도 계속해서 프로젝트를 개선하고 출시 - 단순히 개념 뿐만 아니라 작동 방식이나 구현 방법에 대해서도 알아두자 1. 다른 언어/프레임워크(GraphQL -> REST API와 다른 점, Node.js -> Spring Boot와 차이점) REST API 장점 - HTTP 캐싱 잘 사용 가능, 파일 전송 등 단순한 텍스트로 처리되지 않는 요청들이 있을 때, 요청의 구조가 정해져 있을 때 GraphQL 장점 - 다양한 요청들에 대해 응답할 수 있어야 할 때(엔드포인트 하나), 오버페칭(요구사항보다 많은 데이터 반환하는 경우) 해결 단점 - 고정된 요청과 응답만 필요한 ..

Java/공부 2022.09.12

자바 공부

[1] 코드스테이츠 커리큘럼 참조 1. OOP 기초(Java 언어의 클래스와 객체 이해 및 OOP 적용) 2. OOP 심화(객체지향의 원리와 설계 및 구현) 3. Collection 프레임워크(List, Set, Queue, Map) - List: 순서가 있는 데이터의 집합, 중복 허용. import java.util.ArrayList; class Test { public static void main (String[] args) { ArrayList marks = new ArrayList(); marks.add(50); marks.add(60); marks.add(40); marks.add(70); System.out.println(marks); } } - Set: 순서가 없는 데이터의 집합, 중복 허..

Java/공부 2022.09.12

[디자인 패턴] 팩토리 메소드 패턴

팩토리 메소드 패턴 - '객체'와 '객체 생성 클래스'를 따로 분리하는 디자인 패턴 -> 객체 생성 클래스가 따로 분리되어 있어서, 객체 생성 변화에 유연하게 대비 예제) 1. 상품을 만드는 상품 생성자를 생성 2. 상품을 상속받아서 여러 개의 세부 상품(물, 휴지, 물티슈 등)을 구현한다. 1) 상품 생성자 public abstract class ProductCreator{ public Product create() { // 템플릿 메소드 패턴 이용 final Map productInfo = getProductInfo(); // 1. DB에서 상품 정보를 가져온다. final Product product = createProduct(productInfo); // 2. 상품을 생성 return produ..

Java/공부 2022.06.16

SpringBoot 구조 정리

스프링부트를 공부하면서 스프링부트 프레임워크의 각각 패키지들이 어떤 역할을 하는지 정리하는 글입니다. 프로젝트 구조 - domain - repository - dto - service - controller Domain - db의 테이블과 직접적으로 매핑되는 클래스 - jpa 사용 시 여러 어노테이션을 사용해서 테이블, 필드, 필드 옵션 등을 설정 - 자주 사용되는 어노테이션 - @Entity: 테이블과 1:1로 매핑되는 어노테이션. 해당 어노테이션을 붙이면 jpa가 해당 클래스를 관리 - @Column: 필드에 붙이는 어노테이션. 해당 어노테이션을 붙이면 컬럼으로 인식 - @Id - pk를 지정하는 어노테이션 - @GeneratedValue - pk가 중복되는 것을 방지하기 위해 작성하는 어노테이션 -..

Java/공부 2022.04.04

JPA Auditing

Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. (ex. 생성일, 수정일 등) 데이터베이스에서 누가, 언제 그 일을 했는지 기록을 잘 해야 합니다. 그래서 공통적으로 도메인들이 가지고 있는 필드나 컬럼은 중요한 데이터입니다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있습니다. Audit은 '감시하다'라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 업데이트를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주..

세션 저장소로 데이터베이스 사용

현업에서 세션 저장소에 대해 3가지 중 한 가지를 선택하는데 1. 톰캣 세션을 사용 - 별다른 설정 없을 때 기본적으로 선택되는 방식 - 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 설정이 필요 2. MySQL과 같은 데이터베이스를 세션 저장소로 사용 - 여러 WAS 간의 공용 세션을 사용할 수 있는 가장 쉬운 방법 - 많은 설정 필요 없지만, 로그인 요청마다 DB IO가 발생하여 성능상 이슈가 발생할 수 있다. 3. Redis, Memcached와 같은 메모리 DB를 세션 저장소로 사용 - B2C 서비스에서 가장 많이 사용 2번을 사용하려면 spring-session-jdbc 등록을 해야 한다. build.gradle에 compile('org.springframework..

SessionUser

세션에 사용자 정보를 저장하기 위한 Dto 클래스 -> 왜 User 클래스 쓰지 않고 새로 만들어서 쓰는지? - User 클래스를 세션에 저장하려면 User 클래스에 직렬화를 구현하지 않았다는 의미의 에러가 뜬다. 그렇다고 오류를 해결하기 위해 User 클래스를 넣기에는 User 클래스가 엔티티이기 때문에 언제 다른 엔티티와 관계가 형성될지 모른다. 즉, @OneToMany, @ManyToMany 등 자식 엔티티를 갖고 있다면 직렬화 대상에 자식들까지 포함되서 성능 이슈, 부수 효과가 발생할 확률이 높다. 그래서 직렬화 기능을 가진 세션 Dto를 하나 추가로 만드는 것이 이후 운영 및 유지보수 때 도움이 많이 된다.

스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현

로그인을 직접 구현할 때 - 로그인 시 보안 - 비밀번호 찾기 - 비밀번호 변경 - 회원가입 시 이메일 혹은 전화번호 인증 - 회원정보 변경 하지만 OAuth 로그인 구현 시 위의 목록의 것들을 모두 구글, 페이스북, 네이버 등에 맡기면 된다. 구글 서비스 등록 https://console.cloud.google.com Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com [프로젝트 선택] - [새 프로젝트] [API 및 서비스] - [대시보드] - [사용자 인증 정보] - [사용자 인증 정보 만들기] - [OAuth 클라이언트 ID 만들기] [동의 화면 구성] - [앱 이름..

브라우저의 스코프

src/main/resources/static/js/app/index.js var init = function() { ~ }; var save = function() { ~ }; init(); index.js의 첫 문장에 var main = { ~ }라는 코드를 선언했는데 굳이 index라는 변수의 속성으로 function을 추가한 이유가 뭘까? 예를 들어 index.mustache에서 a.js가 추가되어 a.js도 a.js만의 init과 save function이 있다해도 브라우저의 스코프는 공용 공간으로 쓰이기 때문에 나중에 로딩된 js의 init, save가 먼저 로딩된 js의 function을 덮어쓰게 된다. 여러 사람이 참여하는 프로젝트에서 중복된 함수 이름은 자주 발생할 수 있다. 그러다 보니..

머스테치

템플릿 엔진 - 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어 예전에 Jsp, Freemaker 등(서버 템플릿 엔진) 요즘은 리액트, 뷰의 View 파일(클라이언트 템플릿 엔진) -> 모두 결과적으로 지정된 템플릿과 데이터를 이용하여 HTML을 생성하는 템플릿 엔진 $(document).ready(function(){ if(a=="1"){ % } }); 이 코드는 if문과 관계없이 무조건 test를 콘솔에 출력하는데 이유는 프론트엔드의 자바스크립트가 작동하는 영역과 JSP가 작동하는 영역이 다르기 때문인데 JSP를 비롯한 서버 템플릿 엔진은 서버에서 구동된다. 서버 템플릿 엔진을 이용한 화면 생성은 서버에서 Java 코드로 문자열을 만든 뒤 이 문자열을 HTML로 변환하여 브..