이번에는 Board 게시판을 추가하였다. 뿐만 아니라 이미지 업로드 기능도 추가하였다. 이후 성능최적화를 위하여 N+1문 제도 해결하였는데, 아래에 자세한 설명이 있다. 이번에 포스팅은 중요한 것 위주로 설명되어 있다. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAcc..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141J8KAIcCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 위 트리는 식 (9/(6-4))*3을 이진트리로 표현한 것이고 이를 계산한 값을 출력하면 된다. 사람들은 사칙 연산을 할 때(9/(6-4))*3식과 같은 중위 표기식으로 계산을 한다. 하지만 컴퓨터를 통해 각 연산자의 우선순위대로 계산을 하려면 후위 표기식으로 변환해 계산해야 한다. 즉 (9/(64))*3 → 964-/3*으로 변환되고 이를 계산한다. 따라서 해당 문제에서는 트리를 입력받고 후위 순..
이번에는 Message API를 추가하였다. 쪽지기능은 회원과 회원 사이에 주고받는 쪽지를 의미한다. 우선 달라진 코드와 중요한 포인트에 대해 알아보자. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAccessDeniedHandl..
비트마스크란? - 비트마스크(BitMask)는 이진수를 사용하는 컴퓨터의 연산 방식을 이용하여, 정수의 이진수 표현을 자료 구조로 쓰는 기법을 말한다. - 이진수는 0 또는 1을 이용하므로 하나의 비트(bit)가 표현할 수 있는 경우는 두 가지이다. - 보통 어떤 비트가 1이면 "켜져 있다"라고 말하며, 0이면 "꺼져 있다"라고 말한다. - 8 bits = 1byte 비트마스크를 사용하면 다음과 같은 이점을 얻을 수 있다. 수행시간이 빠르다. 코드가 짧다 메모리 사용량이 더 적다. 비트 연산자 AND연산 (&) 대응하는 두 비트가 모두 1일 때, 1을 반환 1010 & 1111 = 1010 OR연산(|) 대응하는 두비트가 모두 1 또는 둘 중 하나라도 1이면, 1을 반환 1010 | 1111 = 1111..
이번에는 Member API가 추가되었다. 회원 전체조회, 회원단건조회, 회원 정보 수정, 회원탈퇴 기능이 추가되었다. 저번 포스팅에서 바뀐 점과 중요한 점 위주로 설명할 것이다. SecurityConfig @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAc..
프로젝트 소개 여태까지 여러 프로젝트를 진행했었는데, 그때마다 블로깅을 안했던 것 같다. 이유는 내가 아직 부족한 점이 많아서 좀 더 성장하고 난 이후에 블로깅을 하고 싶었다. 이번 프로젝트는 커뮤니티를 만드는 것인데, 여러가지 기능을 넣어보고 성능 최적화도 진행할 생각이다. 단순 API 개발이지만, 타 개발자와 협업한다는 생각으로 진행할 것이다. 프로젝트 설정 (java 11, Spring-Boot) Dependency 이후 추가로 JWT와 Swagger를 추가해야한다. 이번에 진행할 내용은 다음과 같다. Spring Security + JWT를 이용한 로그인 구현 response를 커스텀하여 응답을 보기 좋게 수정 Swagger 적용 예외처리 security+jwt를 활용한 로그인 구현의 경우 대부분..
인증(Authentication)과 권한(Authorization) 이 두 영역은 사실상 스프링 시큐리티의 핵심이다. 인증(Authentication): 보호된 리소스에 접근하는 대상, 즉 사용자에게 적절한 접근 권한이 있는지 확인하는 일련의 과정을 의미한다. 이때 보호된 리소스에 접근하는 대상(사용자)을 접근 주체(Principal)이라고 한다. 권한(Authorization): 인증절차가 끝난 접근 주체가 보호된 리소스에 접근 가능한지를 결정하는 것을 의미한다. 이때 권한을 부여하는 작업을 인가(Authorize)라고 한다. 쉽게 말하면 인증은 아이디와 비밀번호를 입력 받아 로그인하는 과정 자체를 의미하는 것이고 권한이 필요한 리소스에 접근하기 위해서는 당연히 이러한 인증 과정을 거쳐야 한다. 스프링..
작년에 알고리즘랩스를 신청하고 거의 처음 제대로 알고리즘을 배웠었다. 사실 수료를 한지 시간이 좀 지났지만, 뒤늦게라도 후기를 남기려 한다. 우선 알고리즘 랩스를 신청한 이유는 알고리즘 문제를 푸는데, 모르는 지식이 많았다. 스스로 독학을 하면서 풀어왔는데, 제대로 개념을 이해하고 싶었기 때문에 신청했다. 알고리즘랩스는 장점이 많은 시스템이라 생각된다. 우선 커리큘럼이 좋았다고 생각한다. 알고리즘에서 중요하고, 비중이 높다고 생각되는 것은 대부분 알려준다고 생각한다. 매주 시험을 봤는데, 본인이 부족하거나 푸는데 어려움을 느낀 문제를 다시 풀어볼 기회가 생긴다. 또한 지표를 통해 본인의 코드가 어느 정도로 빠르고, 간결한지 알 수 있었다. 이러한 지표기능이 있기 때문에, 코드에 더 신경을 많이 썼었다. ..
Spring Data JPA가 기본적으로 제공해 주는 CRUD 메서드 및 쿼리 메서드 기능을 사용하더라도, 원하는 조건의 데이터를 수집하기 위해서는 필연적으로 JPQL을 작성하게 된다. 간단한 로직을 작성하는데 큰 문제는 없으나, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 상당히 길어진다. JPQL 문자열에 오타 혹은 문법적인 오류가 존재하는 경우, 정적 쿼리라면 애플리케이션 로딩 시점에 이를 발견할 수 있으나 그 외는 런타임 시점에서 에러가 발생한다. 이러한 문제를 어느 정도 해소하는데 기여하는 프레임워크가 QueryDSL이다. QueryDSL은 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크이다. QueryDSL의 장점 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 ..
https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 핵심 이 문제는 DFS를 이용하면 쉽게 풀 수 있다. 또한 알파벳을 이미 방문했는지 판단해야 한다. 정답 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int..