본문 바로가기

전체 글43

[BOJ] 백준 18108번 1998년생인 내가 태국에서는 2541년생?! (Java) 문제링크 https://www.acmicpc.net/problem/18108 18108번: 1998년생인 내가 태국에서는 2541년생?! ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다. 불교 국가인 태국 www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a; a = sc.nextInt(); sc.close(); System.out.print(a - 543); .. 2022. 11. 9.
[BOJ] 백준 10926번 ??! (Java) 문제링크 https://www.acmicpc.net/problem/10926 10926번: ??! 준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때 www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String a = ""; a = sc.next(); sc.close(); a = a + "??!"; System.out.print(a); } } 2022. 11. 8.
[BOJ] 백준 10869번 사칙연산 (Java) 문제링크 https://www.acmicpc.net/problem/10869 10869번: 사칙연산 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a, b; a = sc.nextInt(); b = sc.nextInt(); sc.close(); System.out.println(a + b); System.out.println(a - b); System.out.println(a.. 2022. 11. 7.
[DailyLog] Postman Status: 401 Unauthorized 상황 간단한 프로젝트를 위한 Spring MVC 계층을 만들고 분명 포스트맨으로 요청과 응답을 잘 주고 받는 것을 확인하였다. Spring Security 의존성만 더 추가된 팀원의 프로젝트를 나의 로컬로 pull 하였다. 그런데 갑자기 포스트맨이 응답이 없어지고 포스트맨에 'Status: 401 Unauthorized' 에러가 떴다. Unauthorized를 보니 Spring Security 의존성과 관련된 문제인 것 같다. 해결 기존의 작업을 이어나가기 위해 두 가지 방법을 알아냈다. 첫 번째 방법은 위 의존성을 주석처리하고 작업을 진행하는 것이다. 두 번째 방법은 @SpringBootApplication 옆에 (exclude = {SecurityAutoConfiguration.class})을 추가하.. 2022. 10. 27.
[Spring] 프록시 서버 Proxy Server 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 말한다. 즉, 클라이언트가 서버와 연결될 때 서버에 바로 접근하지 않고 자신을 통해 접근할 수 있도록 해주는 대리 역할을 하는 서버이다. 프록시 서버는 위치에 따라서 Forward Proxy와 Reverse Proxy 두 가지로 나뉜다. Forward Proxy 클라이언트에 가까이 위치한 프록시 서버를 Forward Proxy라고 한다. Forward Proxy는 클라이언트가 동일한 요청을 보낼 때 서버에 재요청을 하지 않고 캐시에 저장해놓은 결과 데이터로 응답한다. 따라서 요청 결과를 클라이언트에게 빠르게 전달할 수 있는 장점이 있다. 또한 서버에.. 2022. 10. 11.
[Spring] Spring Security의 웹 요청 처리 흐름 Spring Security를 애플리케이션에 적용하는데 어려움을 겪는 가장 큰 이유 중 하나는 Spring Security의 아키텍쳐와 Spring Security의 컴포넌트들이 어떻게 인터랙션해서 인증, 권한 등의 보안 작업을 처리하는지 이해하지 못하기 때문이다. 그리고 이러한 Spring Security의 동작 방식을 조금 더 잘 이해하기 위해서는 보호된 웹 요청을 처리하는 일반적인 처리 흐름과 Spring Security에서 지원하는 Filter의 역할을 이해하는 것이 선행되어야 한다. 따라서 오늘은 Spring Seucrity의 웹 요청 처리 과정 중에서 가장 기본이 되는 웹 요청의 일반적인 흐름과 Spring Security에서 지원하는 Filter의 역할에 대해 알아보겠다. 보안이 적용된 웹 .. 2022. 9. 28.
[Spring] Spring Security 커피를 주문할 수 있는 커피 주문 어플리케이션을 만들었다. 보안을 전혀 고려하지 않은 상태로 오픈을 하였다고 가정하면 어떤 문제가 발생할 수 있을까? 로그인(인증, Authentication) 기능이 없다. 로그인 기능이 없다면 자신을 증명할 방법이 없기 때문에 다른 사람이 회원으로 등록한 내 정보 또는 내가 주문한 정보 등에 대해서 애플리케이션의 API 호출해서 얼마든지 조회가 가능하게 된다. 이 상태로는 다른 사람의 개인정보를 탈취하는 것은 식은 죽 먹기가 될 것이다. API에 대한 권한 부여(인가, Authorization) 기능이 없다. 커피를 주문하는 손님은 메뉴판에 카페의 커피 정보를 마음대로 등록할 수 없어야 한다. 하지만 API에 대한 접근 권한이 부여되지 않는다면 손님이 마음대로 카페 메.. 2022. 9. 27.
[Spring] API 문서화 API 문서화 Controller는 클라이언트 쪽에서 HTTP request URL을 통해 클라이언트의 요청을 전달 받는다. 그런데 백엔드 애플리케이션은 REST API 방식의 애플리케이션이다. 따라서 API 문서화란 클라이언트가 REST API 백엔드 애플리케이션에 요청을 전송하기 위해서 알아야 되는 요청 정보(요청 URL(또는 URI), request body, query parameter 등)를 문서로 잘 정리하는 것을 의미한다. API 문서 생성의 자동화 API 사용을 위한 어떤 정보가 담겨 있는 문서를 API 문서 또는 API 스펙이라고 한다. API 문서는 개발자가 요청 URL 등의 API 정보를 직접 수기로 작성할 수도 있고, 애플리케이션 빌드를 통해 API 문서를 자동 생성할 수도 있다. .. 2022. 9. 26.
[Spring] JPA 엔티티 간 연관 관계 매핑 엔티티 클래스 간의 관계를 만들어주는 것을 연관 관계 매핑이라고 한다. 연관 관계 매핑은 참조하는 방향성을 기준으로 단방향 연관 관계와 양방향 연관 관계로 구분할 수 있다. 그리고 참조할 수 있는 객체의 수에 따라서 일대다(1:N), 다대일(N:1), 다대다(N:N), 일대일(1:1)의 연관 관계로 나눌 수 있다. 카페에서 커피를 주문할 수 있는 커피주문 애플리케이션에서 회원 정보인 Member 클래스와 주문 정보인 Order 클래스의 관계를 살펴보겠다. 단방향 연관 관계 위 그림에서 Member 클래스는 Order 객체를 원소로 포함하고 있는 List 객체를 가지고 있으므로 Order를 참조할 수 있다. 즉 Member는 Order의 정보를 알 수 있다. 반면에 Order 클래스는 Member 클래스에.. 2022. 9. 25.
[Spring] DTO(Data Transfer Object) DTO (Data Transfer Object) DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나이다. Transfer 라는 단어에서 알 수 있듯이 데이터를 전송하기 위한 용도의 객체 정도로 생각할 수 있다. 바로 클라이언트에서 서버 쪽으로 전송하는 요청 데이터, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터의 형식으로 클라이언트와 서버 간에 데이터 전송이 이루어지는데 이 구간에서 DTO를 사용할 수 있다. DTO가 필요한 이유 1. DTO 클래스를 이용한 코드의 간결성 @RestController.. 2022. 9. 24.
[Spring] Controller Controller 부트스트랩(Bootstrap) 애플리케이션이 실행되기 전에 여러가지 설정 작업을 수행하여 실행 가능한 애플리케이션으로 만드는 단계를 의미한다. @RestController Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의한다. 또한 @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록해준다. @RequestMapping @RequestMapping은 클라이언트의 요청과 클라이언트 요청을 처리하는 Handler Method를 매핑해주는 역할을 한다. @RequestMapping을 Controller 클래스 레벨에 추가하여 클.. 2022. 9. 23.
[Spring] Spring MVC 아키텍처 Spring MVC Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크이다. 개발자들 사이에서 Spring Web MVC를 줄여서 Spring MVC라고 부르고, Spring MVC는 웹 프레임워크의 한 종류이기 때문에 Spring MVC 프레임워크라고도 불린다. Spring MVC에서 M은 Model을 뜻한다. 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고 한다. Spring MVC에서 V는 View를 의미한다. View는 Model 데이터를 이용하여 웹브라우저와 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스(Resource)를 제공한다. 또한 View는 JSON 포맷의 데이터를 생성한다. Spring MVC에서 C는 Controller를 의미한다.. 2022. 9. 22.
[Spring] Spring Framework 특징(POJO, IoC/DI, AOP, PSA) Spring 삼각형 위 그림은 Spring 핵심개념들을 표현하는 Spring 삼각형이다. POJO라는 것을 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다. POJO (Plain Old Java Object) Plain은 플레인 요거트를 떠올리면 이해하기 쉽다. 플레인 요거트는 과일이나 시리얼이 들어가지 않은 순수한 요거트를 의미한다. 즉 POJO란 Java로 생성하는 순수한 객체를 말한다. POJO를 이용해서 프로그래밍 코드를 작성하는 것을 POJO 프로그래밍이라고 하는데 이 POJO 프로그래밍에도 규칙이 있다. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 하며 특정 환경에 종속적이지 않아야 한다. POJO 프로그래밍이 필요한 이유 1. .. 2022. 9. 21.