BackEnd/JAVA\SPRING

Template 메소드 패턴과 Callback 패턴에 대해 우선 따로따로 이해해보는 게 좋겠다 ! (이론 -> 구현 내용 순으로 구성하였습니다.) 이론 Template 메소드 패턴 (문제 상황) 핵심 기능 & 부가 기능이 모조리 섞여 있는 문제 (해결 방법) 변하는 것과 변하지 않는 것(반복되는 코드)을 분리하겠다 ! -> 상속으로 푼다. 이론보다 , 코드 샘플로 이해해보자! AbstractTemplate (변하지 않는 부분, 반복되는 부분) 이 부분이 바로 Template, 우리가 아는 파워포인트 템플릿과 비슷하게 변하지 않는, 반복되는 부분에 해당한다. package hello.advanced.trace.template.code; import lombok.extern.slf4j.Slf4j; @Slf4..
개요아무 생각 없이 인증처리를 안 해놓은 벌로 누군가의 침입이 일어났다.. 😱어쩐지 람다 함수 절반이 안 돌아서 데이터를 살펴보니 누군가.. 백준에 없는 아이디와 이름을 넣어놨다. 심지어 스터디에도 넣어놨넴... 😵 인증처리를 미리미리 해뒀으면 좋았겠지만, 지금이라도 코알라 임원진끼리만 공유할 수 있는 비밀번호 처리를 해두는 것이 좋겠다 .Spring SecuritySessionSpring Security는 기본적으로 JSESSION_ID라는 이름을 가진 세션 방식의 인증 메카니즘으로 인증을 처리한다. Spring Security를 공부하다 보면 JWT 개념에 대해서도 같이 공부하게 되는데, 토큰(JWT) 방식과, 세션 방식은 엄연히 다른 내용이므로 이에 대해 알고 가야 한다 ! 세션에 대한 내용에 대해..
Java Spring을 사용하면서 드는 가장 큰 고민은 역시나 어떻게 하면 잘 쓸 수 있을까 이다. 이번 프로젝트는 규모가 크지는 않더라도 제대로 끝내보자고 생각했다! 구현 도중 Entity간 연관관계는 어떻게 줄지, 쿼리는 어떻게 작성할지(어디에서 어떻게 조회할지), 데이터가 없는 경우 Null 처리는 어떻게 할지, 코드는 어떻게 보기 쉽게 작성할지,, 등등 고민을 많이 하게 되었고 다음 프로젝트에서는 이 고민들을 더욱더 반영해보고 싶다 접근제어자, 생성자 사용 클래스와 멤버의 접근 권한을 최소화하자 는 것이 접근제어자의 핵심이다. 접근제어자를 공부하면서 생성자와 static, final 등의 변수도 함께 공부하는 것이 도움이 많이 되었다. 접근수준 private : 멤버를 선언한 top level 클..
이 글은 Springboot war 파일 배포 글의 후속편입니다. 위 글에서 나는 파일을 jar 방식으로 배포했고 문제 없이 동작했었다. 그런데...... ??? 후.. build.gradle에 여러 의존성을 추가하고 커밋하고.. 한 이후 갑자기 빌드가 실패하기 시작했다.. 아직도 정확히 어떤 커밋이 영향을 준건지는 잘 모르겠다😑 커밋 지워버림.. 그래도 정석적인 방법으로 다시 구현해볼 수 있었고, 보이는 것과 같이 결국 build에 성공했다 ! 이 짜릿했던 순간을 함께 알아보자 😆 결론적으로 말하면 war 파일을 jar 형식으로 배포하지 말자.. 유효한 jarfile이 아니기 때문에 아래 오류를 볼 수 있다. Error: Invalid or corrupt jarfile /app.war WAS 와 WS ..
다음은 토비의 스프링 7.3~7.4장 을 공부하고 정리하였습니다. 7.1~7.2장 내용 간단 요약 SQLReader - SQL을 어떻게 읽어오는지 SqlRegistry - SQL을 어떻게 저장해둘 건지 SqlService 이란? @PostConstruct 가 달린 빈 초기화 메소드와 SqlService 인터페이스에 선언된 메소드인 getFinder()을 sqlReader과 sqlRegistry를 이용하도록 변경 자기 자신을 참조하는 빈이다. → sqlService를 구현한 메소드와 초기화된 메소드는 외부에서 DI 된 오브젝트라고 생각하고 결국 자신의 메소드에 접근하므로 이 셋을 이용하여 디폴트 의존관계를 갖는 빈을 만들 수 있다. 디폴트 의존관계란 외부에서 DI 받지 않는 경우 기본적으로 자동 적용되는 ..
다음은 토비의 스프링 6장 AOP 를 공부하고 정리하였습니다. AOP를 이해하기 전에 먼저 아래 개념이 선행되어야 한다. 빈 생명주기 (그냥 훑어봐도 이해하기 쉽다. 아래 빈 후처리~ 로직을 이해하려면 필연적으로 알아야 함 !) DI Transaction (DataBase 관련 개념) 프록시 개념 아래 여러 혼란스러운 개념들이 나오니 단어들을 헷갈리지 않고 정리하면서 보는 과정이 필요하다.. AOP를 한 마디로 말하면, 공통된 기능을 재사용하는 기법이다. spring에서 볼 수 있는 AOP의 적용 대상은 바로 @Transactional 기능이다. 우선 Transactional 의 기본 코드는 아래와 같다는 사실을 알아두자. public void upgradeLevels() { PlatformTransac..
다음은 토비의 스프링 5.1 사용자 레벨 관리 기능 추가 를 공부하고 정리하였습니다. 요구사항 - 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나이다. - 사용자가 처음 가입하면 BASIC 레벨이며, 이후 활동에 따라 한 단계씩 업그레이드 도니다. - 가입 후 50 회 이상 로그인하면 BASIC에서 SILVER 레벨이 된다. - SILVER 레벨이면서 30번 이상 추천을 받으면 GOLD 레벨이 된다. - 사용자 레벨의 변경 작업은 일정한 주기를 가지고 일괄적으로 진행된다. Level을 Enum 을 쓰자 ! 만약 Enum이 아닌 class 로 쓴다면 ? 아래와 같이 일일히 int type으로 저장한다.이후 DB에서 어떻게 갖다 쓸 것인가? if (user1.getLevel() == U..
다음은 토비의 스프링 3.4 컨텍스트와 DI ~ 3.5장 3템플릿과 콜백 을 공부하고 정리하였습니다. DI에 대해 다시 복습하자 ! 1. 그림으로 표현해본다면? Pencil 객체와 Store 객체가 있다. 이 때 의존성은 다음과 같이 문장으로 표현된다. A가 B를 사용한다. A가 B에 의존성이 있다. A-store / B-pencil DI 가 아닌 코드를 먼저 보자. public class Store { private Pencil pencil; public Store() { this.pencil = new Pencil(); } } Store 객체 안에서 직접 객체를 생성하고 초기화한다. DI 인 코드 public class Store { private final Pencil pencil; public S..
아래 글은 토비의 스프링을 읽고 공부하였습니다. 목차 1. DI란 1) 의존관계 2) 모델링 시점의 의존관계 vs 런타임 시점의 의존관계 3) 제3의 존재 4) 의존관계 검색과 주입 5) 의존관계 주입 방법 3가지 2. XML을 이용한 DI 1) DI 설정정보를 만드는 XML 2) XML을 이용하는 애플리케이션 컨텍스트와 Datasource 1. DI DI는 의존관계 주입으로, IoC와 동떨어진 개념은 아니다. DI는 오브젝트 레퍼런스를 외부로부터 제공(주입)받고 이를 통해 여타 오브젝트와 동적으로 의존관계가 만들어지는 것이 핵심이다. 우리가 보통 알고있는 가장 대표적인 DI는 @Autowired 어노테이션일 것이다. 1. 의존관계 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입하는 방식이다...
아래 글은 토비의 스프링을 읽고 공부하였습니다. 목차 1. IoC란 1) 팩토리 2) IOC(제어의 역전) 3) 프레임워크와 라이브러리 2. 스프링의 IoC 1) Bean과 Bean Factory 2) 애플리케이션 컨텍스트와 동작방식 3) 직접 만든 애플리케이션 컨텍스트와 object factory의 차이점 3. 싱글톤 1) 싱글톤으로 만드는 이유 2) 싱글톤 패턴의 한계 3) 싱글톤 레지스트리 4) 싱글톤 사용 시 주의할 점 1. 오브젝트 팩토리 1. 팩토리 앞에서 우리는 UserDaoTest에 DB 연결에 대한 책임(ConnectionMaker 구현 클래스)을 던져버렸다. 이번에는 이 책임을 DaoFactory로 분리해보자. public class DaoFactory { public UserDao u..
아래 글은 토비의 스프링을 읽고 공부하였습니다. 목차 1. DAO 1) DAO vs DTO 2) DAO-관심사의 분리 2. DAO의 분리 1) 클래스의 분리 2) Interface의 도입 3) 관계설정 책임의 분리 2. 원칙과 패턴 1) 개방 폐쇄 원칙 2) 전략 패턴 1. DAO 1. DAO vs DTO DAO에 대해 파악하기 위해 우리가 개발할 때 많이 사용하는 DTO 개념과 비교해보자! DTO는 데이터를 운반하기 위한 틀이라면, class Person { private String name; private int age; } DAO는 data에 접근하기 위한 객체로, DB 접근에 대한 로직과 비즈니스 로직(Service, Controller, Repository)을 분리하기 위해 사용한다. 사실 지..
FOSSLIGHT Fosslight는 LG전자에서 자체 개발하여 사용하고 있는 오픈소스 관리 통합 시스템을 누구나 사용할 수 있도록 2021년 오픈소스로 공개한 프로젝트이다. 매년 oss에서 오픈소스 컨트리뷰션을 통해 자체적으로 멘토와 멘티를 선발하고 있으며 좋은 기회에 참여할 수 있게 되었다. FOSSLight FOSSLight으로 완성하는 Open Source Governance fosslight.org 이슈 내용 ISSUE - #817 Project List, 3rd Party List > Add watcher search PR - Added watcher search box in Project List, 3rd Party List 내가 맡았던 이슈는 위의 사진처럼 검색을 할 때 Watcher 값도..
OpenAI 와 open API OpenAI에서 chatGPT와 관련한 open API를 배포하였기 때문에 이제 누구나 손쉽고 편리하게 ChatGPT API를 이용해서 애플리케이션을 제작할 수 있게 되었다. ChatGPT API와 Whisper API 연동 방법 API 사용법에 관련하여 공식 문서로 제공이 되어 있어 이를 공부해 구현해볼 수 있었다. 내가 지금껏 썼던 OPEN API는 보통 라이브러리 형식이라 다운로드하여 import해서 쓰는 형식이 많았는데, OpenAI에서 제공해주는 API는 HTTP 통신 형태로 CURL 명령어를 보며 이해해야 하는 과정이 있었다. CURL 명령어 curl(client url) 명령어는 프로토콜들을 이용해 URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때..
Spring Security는 Java 애플리케이션에서 인증/권한 부여 서비스를 제공하는 프레임워크이다. 이를 활용해서 소셜 로그인(카카오, 애플)을 구현해보았다. 이 글에서는 우선 Spring Security로 JWT를 구현하는 방법에 대한 글을 써보려고 한다. 일단 Spring Security는 그리 쉽지 않다.. 구현도 쉽지 않고, 찾아보니 이 쪽 영역을 제대로 공부하기 위해서 사람들이 시간을 잡고 공부하는 것 같았다. 그래서 공부방향을 코드에 대한 대략적인 JWT 작동 방식을 이해하고, 내가 나중에 확실히 또 써먹을 수 있도록 공부해보는 것으로 잡았다. 아래를 봐도 아주 복잡한 filter의 향연을 볼 수 있다 .. 인증 과정? Spring Security에서 JWT 인증 과정은 다음과 같다. d..
config>SecurityConfig에 다음 코드를 붙여놓는다. @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .useDefaultResponseMessages(false) .apiInfo(apiInfo()) .select() //모든 경로의 api를 사용한다. .apis(RequestHandlerSelectors.basePackage("com.example.umc3_teamproject")) .paths(PathSelectors.any()) .build() ; } private ApiInfo..
개요 일단 JWT에 대한 개념부터 알고가자! JWT는 JSON Web Token의 약자로, 로그인 인증 기능에서 사용하는 토큰을 만들 때 사용하는 기술이다. JWT를 구현하는 방법은 두 가지이다. 1. jwt-java 라이브러리를 사용하여 JWT를 생성하고 파싱하는 방법 2. spring security 라이브러리 이용하기 이번에 로그인 로직을 짤 때 일반 로그인은 1번으로, 소셜 로그인은 2번 로직으로 짜게 되어 JWT와 많이 친해질 수 있었다. 이번 글은 1번 방법에 대한 설명이다. 2번 방법(JWT+소셜로그인) 에 대한 설명은 이쪽에서 확인 가능하다. UMC 동아리에서 제공해준 템플릿 중 로그인 구현 방법 코드를 인용하였다. 아래 코드로 자세히 알아보자. service/JwtService.java ..
SPRING의 가장 강력한 점은 IOC, DI에 있다. DI란, 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. @Bean 어노테이션과 연결지어 생각하는 것이 좋다. 우리는 @Bean을 만들어놓고 그 안에 방법2처럼 setter() 또는 생성자 등을 이용한다. 연결지어 Bean은 위 사진처럼 객체를 만들어서 활용하는 틀로 생각하면 좋다. Bean은 SingleTon으로 생성되는 것으로, Spring Framework에서 딱 한 개가 만들어진다. 그래서 우리는 이 틀 안에서 특성 값을 '특정' 해놓으면 안된다. 그런 방법보다 값을 생성자 또는 setter로 '할당'하자. IoC(제어의 역전)은, SPRIN..
간단한 소개 아래 있는 내용을 구현하면 된다. 이 때 JAVA Convention, Commit Convention 등 지켜야 할 사항이 있다. 이번에 지켜보고 싶었던 사항들 1. 구현 전에 readme에 기능을 작성하고, 그에 맞춰서 commit해보기 2. 커밋 메시지를 자세히, 제대로 작성해보기 (읽어봤을 때 이해가 되도록) 3. 예외 사항(IllegalArgumentException) 또한 고려하며 기능목록을 작성하기 4. 주석처리 깔끔하게 해보기 5. refactoring 제대로 하여 반복되는 코드 없도록 하기 6. Test로 삼을 만한 더미 데이터 만들어보기 7. 일급콜렉션 적용시켜보기 위 내용으로 TDD 훈련해보기! TDD, 정의는 쉽고 체화는 참으로 어렵다. 정의는 쉽다. 테스트를 먼저 만들..
지원 내년엔 꼭 부트캠프를 해보고 싶은 마음이 있다. 다양한 사람들을 만나보고도 싶고, 구현해보고 싶은 서버 툴을 어떻게 짜야할지 감도 안 오는 수준에서 벗어나고 싶은 갈망이 컸다. 그래서 제일 먼저 모집하는 우테코를 지원해보기로 했고, 합격하지 않더라도 프리코스에서 많이 얻어갈 수 있다는 말에 솔깃해 지원하게 되었다. 10월 26일 (수) ~ 11월 22일(화)까지 4주간 일주일에 한 개씩 과제를 제출해야 하고, 제출했던 과제를 기반으로 12월 17일(토)에 코딩테스트 후 합격자를 발표한다. 1주차 과제 이번 우테코 1주차 과제에서 요구하는 것은 그리 어렵진 않았으나, 양이 조금 많다. 아무래도 양 때문에 시간을 갈아넣는 희생은 감수해야 하는 것 같다. 알고리즘 문제 7문제를 풀고, 이 문제들을 테스트..
jeonyoungseo
'BackEnd/JAVA\SPRING' 카테고리의 글 목록