Spring

이번주에는 Spring에 대해서 공부하였습니다. Spring Bean Scope, MVC FrameWork, Spring Boot, Spring Application에 대해서 알아보았습니다. Spring Bean Spring에서 활용되는 POJO(Plain, Old Java Object)를 Bean이라고 부릅니다. POJO(Plain, Old Java Object) 특정 기술에 종속되지 않은, 순수한 자바로 만든 객체를 POJO라고 부릅니다. 이러한 객체를 사용하게 되면, 특정 기술에 종속되어 있지 않기 때문에, 확장성 측면에서 유리한 점이 존재합니다. Bean은 Spring IOC라는 컨테이너에 의하여 관리되며, 우리가 컨테이너에 공급하는 파일에 의하여 생성됩니다. 이때, Bean이 관리되는 범위를 Bean Scope라고합니다. @Component or @Configuration + @Bean의 조합으로 Bean이 등록됩니다. Sing

2022년 11월 2일
·
0개의 댓글
·
post-thumbnail

공공 API를 활용한 버스 시간 확인 로직 구현

요즘 학교에 다니면서 학교 공부에 팀 프로젝트를 병행하고 있어서 글을 올리는게 뜸해졌습니다ㅠ 학교 공부, 팀 프로젝트, CS 공부 3개만 반복적으로 하고있는 것 같습니다... 4학년 되서는 널널하겠죠 뭐... 오늘은 공공데이터포털에서 제공하는 오픈 API를 활용하여 버스 시간을 알려주는 어플처럼 버스 시간 알림 로직을 만들어보았습니다. 팀프로젝트에 사용하게 될 로직이다보니까 어떻게 구현은 해야할 것 같은데, 공공데이터를 어떻게 받아와야하고, 어떤식으로 처리해야할지를 몰라서 막막하였습니다. 하지만, 막상 공공데이터포털에 들어가니 개발자분들을 위해서 어떻게 사용해야할지 적어주셔서 사용하기 매우 수월하였습니다. 일단 먼저 공공API를 활용하기 위해서는 공공데이터포털에 회원하가입하여 로그인을 진행해줍니다. 로그인을 진행하였다면, 버스 API 로직을 구현하기 위하여 몇가치 공공 API 사용 승인을 받아야합니다. 저는 3가지를 승인받아서 사용하였는데, ![](https://velog

2022년 10월 26일
·
0개의 댓글
·

팀 프로젝트 - 로그인

안녕하세요 오랜만에 또 글을 쓰네요ㅋㅋ 지난번에 Board Entity를 통하여 게시글 작성하는 것까지 작성했었는데요... 그 이후로 로그인 기능까지 담당하게 되어서 그 동안 Spring만 붙잡고 살았습니다.. 학교 수업이랑 팀 프로젝트 2개를 병행하려니 죽을 맛이네요 ㅋㅋ 거기다가 로그인 기능 구현은 아직 연습중이여서 그런지 시간이 좀 더 많이 걸리는 작업이었습니다. 뭐 결론적으로는 방금 로그인 기능 구현까지 마친 뒤에 커밋하고 왔습니다. 작업하는 동안은 죽을 맛이였는데, 또 막상 구현한거 보면은 뿌듯하더라구요 ㅋㅋ User Entity와 RefreshToken Entity를 사용하여 로그인 기능과 JWT 토큰에서의 재발급을 어떤식으로 활용할지 정하였습니다. 일단은 로그인까지 구현해보았고, 이제 JWT 토큰을 사용하여 사용자 인증을 수행할 수 있기 때문에 이를 활용하여 게시글 좋아요 기능까지 만들어보려고합니다. 화이팅!

2022년 9월 20일
·
0개의 댓글
·
post-thumbnail

팀 프로젝트 - 커뮤니티

한 일주일정도 velog에 글을 작성 안했었는데요, 그 동안 UMC 3기에 지원로 인하여 좀 바빴습니다. 어떻게 운이 좋아서 서류는 붙었는데 면접에서 떨어졌습니다 ㅋㅋ 면접때 말을 잘 못한것 같아서 떨어질거라고 짐작은 했는데 막상 진짜로 떨어지니까 싱숭생숭하더라구요... 뭐 추석이랑 날이 좀 겹쳐서 떨어진 겸 놀다가 왔습니다. 놀다가 왔으니까 이제 공부해야죠ㅇㅇ 오늘부터 동아리 팀원과 함께 협업 프로젝트를 진행해보고자 하는데, 이번에 진행해볼 프로젝트는 커뮤니티 사이트를 만들어 보기로 하였습니다. 대충 이러한 방향으로 나아가기로 구상하였으며, 오늘은 일단 Board 부분 CRUD와 조회수 기능을 추가해보도록 하겠습니다. 일단은 간단하게 Board Entity를 구현해주었는데, 조회수를 저장

2022년 9월 14일
·
0개의 댓글
·
post-thumbnail

OncePerRequestFilter와 GenericFilterBean

이번에 Spring Security와 JWT를 활용하여 JwtFilter를 등록하는 과정에서 알게된 내용입니다. 파일을 필터로 등록하는 과정에서 특정 파일을 상속받으면서 필터로 등록하게되는데, 그 파일이 바로 OncePerRequestFilter와 GenericFilterBean입니다. 일단 두 파일 모두 상속하는 대상을 필터로 등록될 수 있게끔 만들어 주며, 필터로써 동작하는 로직을 설정할 수 있게 만들어줍니다. 일단 두 파일을 상속받아서 메소드를 오버라이딩해주면, 다음처럼 메소드의 매개변수와 메소드의 이름이 조금 다를 뿐

2022년 9월 6일
·
0개의 댓글
·

Spring Security + JWT - 3

지난 번에는 TokenProvider 파일을 추가하는 부분까지 했으므로, 오늘은 TokenProvider 이외에 파일들을 추가하여 Jwt 설정과 관련된 부분들을 모두 마치도록 하겠습니다. 먼저, JWT와 관련하여 발생하는 오류들을 처리하기 위한 파일들을 추가해줄텐데, 다음 2개의 파일을 생성해줍니다. 우리는 이전까지 만들어보았던 URL의 경우에는 접근에 제한이 없었습니다. 하지만, Spring Security를 사용하게 될 경우에는 특정 URL에 접근하기 위해서 인증 절차를 제시할 수도 있으며, 특정 권한을 요구할 수도 있습니다. 이와 같은 상황에서 인증 절차를 따르지 못하거나, 특정 권한이 없는 경우에는 오류가 발생하는데, 이러한 오류를 처리하기 위한 파일이 바로 JwtAccessDeniedHandler, JwtAuthenticationHandler입니다. AuthenticationEntryPoint 먼저, JwtAuthenticationHandler 파일

2022년 9월 6일
·
1개의 댓글
·
post-thumbnail

Spring Security + JWT - 2

안녕하세요? 이번 시간에는 지난 번에 SecurityConfig 파일 생성까지만 했었던 프로젝트를 이어서 만들어보겠습니다. 지난 시간에 설명한 내용으로는, SecurityConfig 파일은 보안과 관련된 설정을 해주는 파일이라고 설명했습니다. 그런데 일단 우리는 JWT라는 Json 형식의 Web Token을 사용하여 로그인 기능을 구현할 예정이라, 이 토큰과 관련된 로직을 구현해주어야합니다. 일단은 해당 로직을 구현해주기 전에, gradle로 들어가서 의존 관계를 설정해줍니다. 의존 관계 하단에 보시면, io.jsonwebtoken 이라는 코드를 보실 수 있으실텐데, 이것이 바로 JWT와 관련된 의존 관계를 맺어주는 설정이라고 보실 수 있으십니다. 그 다음으로는 application.yml 파일로 들

2022년 9월 3일
·
0개의 댓글
·
post-thumbnail

Spring Security + JWT - 1

미루고 미루던 Spring Security 공부를 시작해보겠습니다. 요즘 DP 공부하느라 다른 공부는 미뤄 왔었는데, 생각해보니 학기 중에 RestAPI랑 Spring Security로 개인 프로젝트 하나 만들기 위해서는 Spring Security를 빨리 해놔야 학기 중에 프로젝트 만들기가 편할 것 같더라구요. 일단 Spring Security와 JWT를 활용하여 사용자 로그인, JWT 토큰 생성, 사용자 확인 등의 기능을 구현해보고자합니다. 다음과 같이 Spring.io를 통하여 의존 관계를 설정해줍니다. 일단 프로젝트를 실행한 뒤에 간단하게 패키지 정도만 만들어 준 뒤에 사용자 정보를 담기 위한 Entity를 생성해줍니다. ![](https://velog.velcdn.com/images/c

2022년 8월 29일
·
0개의 댓글
·
post-thumbnail

Dto와 @Valid

스프링 멘토링에서 사용하였던 프로젝트에 @Valid 어노테이션을 통하여 데이터 입력과 관련된 오류 처리 기능을 향상시켰으며, Dto를 활용하여 클라이언트에게 제한된 정보를 제공하도록 만들었습니다. DTO 일단 먼저 DTO가 무엇인지에 대하여 먼저 설명하자면, Data Transfer Object의 약자로 말 그대로 데이터를 이동할때 사용하게 되는 객체를 나타냅니다. 이때의 데이터 교환은 계층 간 발생하는 데이터의 교환을 의미하며, 보통 Controller와 Service 사이의 데이터 교환에서 주로 사용되는 객체를 의미합니다. 우리가 사용자의 요청으로부터 서비스를 제공하는 경로는 다음과 같습니다. 클라이언트(요청) -> Controller -> Service -> Repository -> Service -> Controller -> 클라이언트(응답) 클라이언트의 요청을 Controller가 매핑함으로써 미리 정의된 기능인 Service를 실행하게 되는데, 해당 Ser

2022년 7월 31일
·
0개의 댓글
·
post-thumbnail

@Bean과 @Component

보통 Spring 서버가 동작하면서 @Controller나 @Service와 같은 어노테이션이 선언된 클래스나 인터페이스는 자동적으로 빈으로 생성하지만, 우리가 서비스를 구현하기 위하여 만든 객체들을 빈으로 생성해주어야하는 경우도 발생합니다. 이러한 경우에 우리는 @Bean 어노테이션, 혹은 @Component 어노테이션을 사용하곤 합니다. 두 어노테이션 모두 선언된 대상을 빈으로 만든다고는 대충 알고 있었으나, 정확히 어떠한 차이가 존재하는지는 알지 못하고 있었기에, 오늘 @Bean과 @Component 어노테이션 사이의 차이에 대하여 알아보았습니다. @Bean 먼저, @Bean 어노테이션입니다. @Bean 어노테이션의 경우, 우리는 보통 메소드 위에 선언된 모습을 많이 보아왔습니다. 다음과 같이 configure 메소드 상단에 @Bean이 사용된 것을 볼 수 있는데, @Bean 어노테이션의 경우에는 메소드의 반환형을 빈으로 등록하기 위하여 사용한다고합니다. 그

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

JWT

지난 번에 CRUD를 구현한 토이 프로젝트를 마치면서, 추후에 쇼핑몰과 같은 다른 웹 페이지를 만들어보겠다고 한 적이 있습니다. 쇼핑몰 웹 페이지를 구축하기 위해서는 일단 사용자에 따라서 사용자의 등급, 소유하고 있는 금액을 다르게 해주어야 하기 때문에 사용자를 식별할 수 있는 수단이 필요하게됩니다. 쇼핑몰 홈페이지의 회원이 아닌 사용자에게는 상품 구매 페이지가 열리지 않도록 설정하며, 회원의 등급에 따른 할인 정책 및 접근할 수 있는 권한등을 제공하기 위해서는 회원을 식별할 수 있는 무언가가 필요하게 됩니다. 이처럼, 사용자를 식별할 수 있는 수단을 우리는 JWT라고 합니다. JWT? JWT란 Json Web Token의 약자로, 단어에서 의미를 유추할 수 있듯이 Json 데이터에 Web Token의 정보를 담은 것입니다. 간단하게 토큰이라고 부르는데, 이러한 토큰을 활용하여 사용자가 허가를 받은 사람인지, 아닌지를 판단하게 됩니다. JWT의 구조 JWT는 3가

2022년 7월 22일
·
0개의 댓글
·

@Transactional

2주차에서 배운 내용을 복습하던 도중, 모르는 어노테이션이 나와서 알아보았습니다. 이제까지 스프링들의 어노테이션을 살펴보면서 느낀건데, 어노테이션들이 단어와 연관된 기능을 수행한다고 느꼈습니다. 그래서 단어의 뜻으로 살짝 유추해보면 거래라는 의미의 Transaction 과 연관되어 있을 것이라고 생각할 수 있습니다. MySQL에서 활용되는 Transaction과 비슷하다고 생각할 수 있는데, 시작부터 마무리까지 성공적으로 수행되어야 완벽한 거래라고 할 수 있는 것처럼, 시스템의 처리 역시 처음부터 끝까지 오류가 발생하지 않아야 성공적인 시스템의 처리라고 할 수 있습니다. 즉, @Transactional 어노테이션이 선언된 메소드의 경우, 메소드를 수행하던 도중 오류가 발생한다면, 메소드를 수행하기 이전 상태로 다시 되돌리는 기능을 수행한다고 합니다. @Transactional은 괄호를 통하여 추가적인 기능을 부여할 수 있는데, @Transactional(readOnly =

2022년 7월 13일
·
0개의 댓글
·