aservmz의 등록된 링크

 aservmz로 등록된 네이버 블로그 포스트 수는 105건입니다.

[Spring] 46. Spring Validation을 이용한 유효성 검증(3) - Validator, ValidatorFactory [내부링크]

- 목차 - Overview How to trigger Bean Validation Validator Concept of Validator Validation methods Field, Getter에 대한 유효성 검증 메서드 Method or Constructor의 Parameters, Return value에 대한 유효성 검증 메서드 Let's do validate! For get a Validator ValidatorFactory Concept of ValidatorFactory Bootstrap API Overview 이번 포스팅에서는 Bean Validation API의 유효성 검증 메커니즘의 [유효성 검증]을 위해 필요한 두 가지 개념에 대해 먼저 알아보도록 하겠습니다. 유효성 검증 로직을 수행하는 Validator Validator 인스턴스를 생성하고 초기화하여 반환하는 ValidatorFactory [제약조건 정의] Domain Model에 Contraint를 부여한다.

[Spring] 45. Spring Validation을 이용한 유효성 검증(2) - @Constraint, ConstraintValidator [내부링크]

Overview 지난 포스팅에 이어서, 이번 포스팅에서는 Bean Validation API의 유효성 검증 메커니즘 이해에 필요한 두 가지 개념에 대해 알아보도록 하겠습니다. Constraint ConstraintValidator - 목차 - Overview 제약조건 Constraint 개념 제약조건을 정의하기 위한 속성 Required Attribute Optional Attribute Additional Attribute Constraint Annotaion의 조건 ConstraintValidator 개념 유효성 검증 대상 정의 @SupportedValidationTarget 동일 Constraint에 대한 여러 ConstraintValidator Example - @NotEmpty Built-in Constraint 참고. validatedBy 속성이 null인데 어떻게 대응되는 ConstraintValidator를 찾아낼까? Spring Validation Posting S

[Spring] 44. Spring Validation을 이용한 유효성 검증(1) - Bean Validation API [내부링크]

Overview 이번 포스팅에서는 스프링에서 지원하는 Bean Validation API에 대해 알아보려고 합니다. 애플리케이션의 모든 레이어에서 발생하는 Validation을 효과적으로 수행하기 위해 Java와 Spring에서 지원하는 Bean Validation API의 필요성 및 동작 메커니즘, 사용방법에 대해 이해하는 것이 이 포스팅 시리즈의 목적입니다. - 목차 - Overview Bean Validation API의 필요성 Problem So what? Jakarta Bean Validation! More about Bean Validation API Specification Implementation Bean Validation API의 유효성 검증 메커니즘 분량이 길어질 것 같아 몇 가지 주제별로 나누어 포스팅을 하려고 합니다. 포스팅이 완료되는 대로 링크를 첨부하도록 하겠습니다. Spring Validation을 이용한 유효성 검증(1) - Bean Validati

[Spring] 42. 단일/다중 파일 업로드 MultipartResolver [내부링크]

#20210505 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링파일업로드 #파일업로드 #MultipartResolver #MultipartFile 이번 포스팅에서는 스프링 프레임워크에서의 파일 업로드에 대해 알아보도록 하겠습니다. 실제 사용예제는 다음 포스팅에서 다루도록 하며, 여기에서는 스프링 프레임워크의 처리 메커니즘을 파악하겠습니다. -목차- 1) HTML form에서의 파일 업로드 표준(?) 2) multipart/form-data 요청의 인코딩 방법 3) Multipart 요청 처리 메커니즘 4) 파일 업로드 라이브러리와 MultipartResolver 구현체 HTML form에서의 파일 업로드 표준(?) Form기반의 파일 업로드 방법을 제시한 RFC 1867은 표준이 아닌 것으로 확인됩니다. HTML에서는 요청 전송을 위해 <form> 태그를 이용할 수 있습니다. 이 때, 전송하고자 하는 데이터의 인코딩 방법을 결정하는 enctype속성

[Spring] 39. REST API 예외처리 방법 (ResponseEntityExceptionHandler) [내부링크]

#20210425 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RESTAPI #ResponseEntityExceptionHandler 이번 포스팅에서는 RESTful 웹 애플리케이션을 개발할 때 발생하는 예외를 처리하는 방법에 대해 알아보고자 합니다. ※ RESTful 웹서비스가 아닌 경우 즉, JSP 등의 화면으로 응답하는 웹 애플리케이션의 경우 아래의 포스팅을 참고하시기 바랍니다. 스프링에서의 예외처리(1) - <error-code> 요소 스프링에서의 예외처리(2) - HandlerExceptionResolver -목차- 1) 스프링 프레임워크의 예외처리 메커니즘 2) REST API 예외 메시지의 형태 3) ResponseEntityExceptionHandler 클래스 4) ResponseEntityExceptionHandler 사용방법 4-1) 에러 메시지를 변경하는 방법 4-2) 사용자 정의 예외 및 시스템 예외의 처리 방법 스프

[Spring] 37. 스프링 CORS - 처리과정을 중심으로 [내부링크]

#20210418 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링CORS #CORS #CrossOriginResourceSharing 지난 포스팅에서 스프링 프레임워크에서 CORS를 허용할 수 있도록 설정하는 방법에 대해 알아보았습니다. 이번에는 사용법이 아닌, 실제로 스프링 프레임워크내에서 어떤 처리절차를 통해 CORS를 지원하고 있는지 코드를 자세히 살펴보고자 합니다. 스프링 프레임워크에서의 CORS 처리 어떤 Handler에 요청이 성공적으로 매핑되면, HandlerMapping 인터페이스의 구현체는 주어진 요청과 Handler에 대한 CORS Configuration을 확인한 뒤에 추가적인 작업을 처리하게 됩니다. 이 때, 매칭되는 CORS Configuration이 있다면, Preflight Requests는 PreFlightHandler에 의해 처리되며, Simple Requests와 Actual CORS Requests는 CorsInter

[Spring] 33. HttpMessageConverter의 종류와 스프링 컨테이너에 등록되는 과정 [내부링크]

#20210322 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RestfulWebService #RESTAPI #HttpMessageConverter #WebMvcConfigurationSupport 이번 포스팅에서는 스프링을 이용하여 RESTful 웹 서비스를 개발할 때 가장 핵심적인 역할을 하는 HttpMessageConverter 인터페이스에 대해 조금 더 자세히 다룹니다. 스프링에서 기본적으로 제공하고 있는 구현 클래스의 종류를 살펴본 후, 스프링 MVC에서 HttpMessageConverter가 어떻게 등록되고 사용되는지에 대해 알아보도록 하겠습니다. HttpMessageConverter 인터페이스 지난 포스팅에서도 소개했지만, 다시 한번 간략하게 소개하겠습니다. HttpMessageConverter 인터페이스의 역할은 크게 두 가지입니다. 요청 본문을 자바 리소스 객체로 변환하는 것 자바 리소스 객체를 응답 본문으로 변환하는

[Spring] 30. 스프링에서의 예외처리(1) - <error-code> 요소 [내부링크]

#20210202 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링예외처리 #Exception #서블릿컨테이너 #error_code 이번 포스팅에서는 스프링 프레임워크에서의 예외처리 (Exception Handling) 에 대해서 다루어본다. 프로그램을 개발할 때에 있어 예외처리는 떼놓을 수 없는, 필수적으로 수행해야하는 하나의 행위이다. 스프링 프레임워크에서는 이러한 예외처리를 어떤 방식으로 수행하는가에 대해 알아보도록 하겠다. 예외가 발생할 수 있는 장소 먼저, 스프링 프레임워크를 이용해 웹 애플리케이션을 개발할 때 예외가 발생할 수 있는 장소는 아래 그림과 같다. 1. Servlet Filter - 프론트 컨트롤러로 요청을 전송하기 전 서블릿 필터를 이용해 공통적인 기능을 구현한다. - 이 때, 발생할 수 있는 예외를 처리해야 한다. - 여기에서는 서블릿 컨테이너가 제공하는 오류 페이지 기능을 이용한다. <error-page> 2. Dispatch

[Spring] 28. 스프링 Form 태그 라이브러리와 사용예제 [내부링크]

#20210127 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #Form태그라이브러리 #스프링커스텀태그라이브러리 스프링 프레임워크를 이용해 웹 애플리케이션을 개발할 때, 주로 JSP를 이용하여 화면(View)을 구성한다. 이 때, JSP안에서 HTML의 <form> 태그를 이용하여 button, input, radiobuttion, checkbox, option 등의 각종 요소들을 표현하게 된다. 스프링에서는 이러한 <form> 태그의 요소들을 조금 더 쉽게 사용할 수 있도록 커스텀한 태그 라이브러리를 제공한다. 이번 포스팅에서는 이 Spring's Form Tag Library 에 대해 다뤄보도록 한다. Spring's Form Tag Library 스프링에서 제공하는 폼 태그 라이브러리는 스프링 2.0 버전부터 사용가능하다. 스프링 MVC 구조와 함께 스프링 폼 태그 라이브러리를 사용할 때 얻을 수 있는 가장 강력한 이점은 데이터 바인딩(Data Bin

[Spring] 25. View(1) - View와 ViewResolver의 개념 + Redirecting, Forwarding [내부링크]

#20210103 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #View #ViewResolver #ViewResolverChaining #Redirecting #Forwarding 최근 포스팅에서 스프링 MVC 패턴에서, C를 담당하는 Controller에 대해 조금 자세히 알아보았는데, 이번에는 V를 담당하는 View와 관련된 부분에 대해 공부해보려한다. 스프링 MVC에서 지원하는 View의 개념과 실제로 컨트롤러단에서 넘어온 View name을 해석하는 ViewResolver의 개념에 대해 알아본다. What is the View Interface? 시작하기에 앞서, 스프링 MVC패턴에서 View의 역할에 대해 다시 한 번 되짚어보자. 사실 View의 역할은 간단하다. 말 그대로 사용자, 클라이언트에게 보이는 화면, View이다. 조금 더 정확하게 말해보자면 컨트롤러단에서 넘겨준 데이터인 Model객체를 이용해서 사용자에게 보여줄 화면에

[Spring] 22. @Controller(3) - 핸들러 메서드의 매개변수에 지정가능한 어노테이션 [내부링크]

#20201229 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #Controller #컨트롤러 지난 포스팅에서는 핸들러 메서드에서 사용할 수 있는 매개변수의 유형에 대해 알아보았다. 이번에는 그 매개변수에 지정할 수 있는 어노테이션의 종류에 대해 알아보도록 한다. 매개변수에 지정 가능한 어노테이션 @PathVariable ㆍURL에서 경로 변수 값을 가져오기 위한 어노테이션 ㆍGET 방식에서의 통신에서 URL에 포함된 값을 변수로 이용할 수 있게 한다. ㆍint, String, Date 등과 같은 간단한 타입은 자동으로 형변환이 이루어진다. @Controller public class WelcomeController { @GetMapping("/PathVariableTest/{intParameter}/{StringParameter}") public String PathVariableTest(@PathVariable int intParamete

[Spring] 16. 트랜잭션 격리 수준과 전파방식 [내부링크]

#20201118 #SpringFramework #스프링프레임워크 #스프링 #Transaction #SpringTransaction #트랜잭션격리수준 #트랜잭션전파방식 지금까지 스프링에서 트랜잭션이 어떻게 구현되어 있는지와 사용하는 방법에 대해 알아보았다. 이번에는 트랜잭션의 네 가지 성질 중 독립성 Isolation을 만족시키기 위한 트랜잭션 격리수준과 트랜잭션 전파방식에 대해 알아본다. 독립성 Isolation 트랜잭션의 네 가지 성질 ACID에서, 독립성은 특히 중요하다고 생각한다. 어떤 트랜잭션이 수행하는 작업에 다른 트랜잭션이 영향을 미친다면, 데이터베이스의 무결성이 깨지게 되는 원인이 되기 때문이다. 그렇다고 트랜잭션을 모두 순차적으로 수행한다면, 처리 성능에 있어 문제가 발생할 것이다. 따라서, 데이터베이스에서는 데이터베이스의 무결성이 깨지지 않고, 동시성 이슈를 어느 정도 해결할 수 있도록 트랜잭션의 격리 수준을 네 단계로 구분하여 정의하였다. 이제부터 트랜잭션의 4가

[Spring] 11. JdbcTemplate를 이용한 다양한 SQL 질의 방법 [내부링크]

#20201108 #SpringFramework #스프링프레임워크 #스프링 #스프링JDBC #JDBC #JdbcTemplate #queryForObject #queryForMap #queryForList #update 지난 포스팅에서 스프링 JDBC를 이용해서 DB에 연동해보았다. 이 때, JdbcTemplate 클래스를 사용했는데 이에 대하여 더 자세하게 알아보고 몇 가지 사용법을 실습해보도록 한다. Jdbc를 사용함으로써 얻을 수 있는 이점 Spring JDBC - who does what? Action Spring You 커넥션 설정 정보 정의 X 커넥션 생성 X SQL문 작성 X 매개변수 정의 및 작성 X 쿼리 준비 및 실행 X 결과에 대한 반복 처리 X 각 결과에 대한 처리 X 예외 처리 X 트랜잭션 처리 X 커넥션 종료 X 출처 : Spring 공식문서 https://docs.spring.io/spring-framework/docs/current/reference/html

[Spring] 06. AOP 사용 예제 (XML기반 설정 방식) [내부링크]

#20201029 #SpringFramework #스프링프레임워크 #스프링 #AOP #AspectOrientedProgramming #관점지향프로그래밍 #XML기반AOP AOP를 XML기반 설정방식을 이용하여 적용하는 실습을 해본다. (Java기반은 뭐때문인지 잘 안된다..ㅠㅠㅠ) ※ 실습 과정에 불필요한 내용과 틀린 내용이 포함되어 있을 수 있습니다. 틀린 점은 지적해주시면 감사하겠습니다! Maven Dependency 추가 우선, 스프링 프레임워크에서 AOP를 사용하기 위해, 다음의 Maven Dependency를 추가해주어야 한다. <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspec

[Spring] 03. Spring Bean을 설정하는 방법 [내부링크]

#20201024 #SpringFramework #스프링프레임워크 #스프링 #DI #DependencyInjection #의존성주입 #ApplicationContext #Bean #XML기반 #자바기반 #어노테이션기반 의존성 주입을 자동화해주는 컨테이너를 DI 컨테이너라고 한다. 스프링 프레임워크에서 DI 컨테이너의 역할을 하는 ApplicationContext, 그리고 ApplicationContext가 관리하는 자바 객체인 Bean에 대해 알아본다. ApplicationContext와 Bean 스프링 프레임워크에서 의존성 주입을 자동으로 해주는 인터페이스, 즉 DI 컨테이너로써의 역할을 하는 것은 ApplicationContext 인터페이스이다. 그리고 이 ApplicationContext가 관리하는 객체, 의존성 주입을 할 수 있는 객체를 Bean 이라고 한다. DI 컨테이너를 이용하여 의존성 주입을 하는 것은 프로그래머가 직접 new 연산자를 이용하여 생성하는 것이 아닌, A

[공간통계와기계학습] EDA(Exploratory Data Analysis) [내부링크]

#20200927 #공간통계와기계학습 #지구통계학 #Geostatistics #EDA #탐색적자료분석 #인하대학교 #공간정보공학과 #학교공부 #복습 이제부터는 지난 포스팅에서 언급했던 '공간통계분석의 3단계' 중 첫 번째 단계인 '탐색적 자료 분석' 에 대하여 공부한다. 탐색적 자료 분석? "탐색적 자료 분석 Exploratory Data Analysis (EDA)" 이 수업 또는 기계학습의 최종적인 목적은 가지고 있는 데이터를 이용하여 우리가 알고자 하는 어떠한 특성에 대해 정확하게 예측하는 것이다. 그러기 위해서는 탐색적 자료 분석의 정의에 대해 아는 것이 굉장히 중요하다고 생각한다. EDA는 미국의 통계학자 John Wilder Tukey 가 고안한 자료분석 방법론이다. 일반적인 통계학은 어떠한 공식에 따라 모델링을 수행하고 가설검정에 기반을 둔 정량적결과를 제시한다. 그러나, 이렇게 생성된 모델을 자기 분야에 맞게 조금만 수정하여 가져다 쓰게 되면서 데이터 자체에 대한 본연의

[공간통계와기계학습] MAUP 가변적 공간 단위 문제 [내부링크]

#20201004 #공간통계와기계학습 #지구통계학 #Geostatistics #MAUP #Modifiable_Area_Unit_Problem #가변적공간단위문제 #Aggregation_Effect #Zonation_Effect #인하대학교 #공간정보공학과 #학교공부 #복습 이번 포스팅에서는 MAUP 이라는 개념에 대해 공부한다. MAUP (The Modifiable Area Unit Problem) MAUP은 1934년 Gehlke and Biehl 이 처음 인식했던 문제로, 이후 Openshaw 와 Arbia 에 의해 자세히 기술되었다. 한국어로 억지로 번역하면 '가변적 공간 단위 문제'라고 번역할 수 있다. MAUP은 지난 포스팅에서 다루었던 공간데이터의 유형 중 Area Data 와 관련이 있다. 샘플링된 위치에서의 속성값을 취득한 후 이를 이용하여 Area Data를 만들어낸다고 했었다. 이렇게 Area Data를 만들어낼 때, 각 Area의 크기, 모양이 공간 통계분석 결과

[Web] CORS와 SOP란? 크로스 도메인 이슈 [내부링크]

#20210416 #Web #HTTP #CORS #SOP #CSRF #크로스도메인이슈 이번 포스팅에서는 크로스 도메인, 즉 서로 다른 도메인간에 전송되는 요청에 따른 이슈와 관련된 두 가지 개념 CORS와 SOP에 대해 다룹니다. -목차- 1) 개요 2) 크로스 사이트 요청 위조 (CSRF, Cross-Site Request Fogery) 3) Origin이란? 4) 동일 출처 정책 (SOP, Same-Origin Policy) 5) 교차 출처 리소스 공유 (CORS, Cross-Origin Resource Sharing) 개요 웹 개발을 하다보면 API서버와의 통신 또는 Ajax를 이용해 리소스를 가져오는 것 등 서로 다른 도메인간의 요청을 하게되는 경우가 있습니다. 하지만 웹 브라우저는 기본적으로 Same-Origin Policy에 의거하여 서로 다른 도메인간의 리소스 공유를 허용하지 않습니다. 이를 가능하게 하기 위해서는 CORS 메커니즘을 적용함으로써 서로 다른 Origin간

[WAS] Apache Tomcat이란?- 간략한 역사와 역할 [내부링크]

본 포스팅에서는 Apache Tomcat이 어떤 소프트웨어인지, 그 역사 및 역할에 대해 조사한 내용을 작성합니다. Overview 웹 개발을 처음 시작하는 사람들부터, 기업에 이르기까지 상당히 많은 웹 애플리케이션이 Apache Tomcat을 이용해 배포되고 있습니다. 그동안 항상 Apache Tomcat을 이용해 배포를 하면서도, 이 Apache Tomcat에 대해 자세히 알고자 한 적은 없었던 것 같아 확실히 이해를 해보려 합니다. 그 중에서도, 이번 포스팅에서는 Apache Tomcat은 어떻게 나오게 되었는지, 그리고 그 역할은 무엇인지에 대해 먼저 알아봅니다. The Breif History 톰캣은 현재는 Apache Software Foundation(ASF)에서 관리되고 있지만, 썬 마이크로시스템즈의 프로젝트로써 처음 개발되었습니다. 썬 마이크로시스템즈에서는 Java Servlet, Java Server Page(JSP)의 참조 구현(reference Implement

[WAS] Apache Tomcat 디렉터리 구조와 두 가지 환경변수(feat. 멀티 인스턴스 구성방법) [내부링크]

Overview 이번 포스팅에서는, Apache Tomcat의 디렉터리 구조, 그리고 Apache Tomcat을 실행하기 위한 환경변수 두 가지에 대해 알아보도록 합니다. 디렉터리 구조를 전체적으로 파악하면서, Apache Tomcat을 구동하기 위한 여러 설정값들을 어떤 파일에서 조작하고, 어떤 위치에 저장하게 되는 지 알아봅니다. 또한, Apache Tomcat을 구동하기 위해 꼭 필요한 환경변수인 CATALINA_HOME, CATALINA_BASE에 대해서 알아보면서 멀티 인스턴스 구성방법에 대해서도 간략하게 알아보도록 합니다. * 해당 포스팅은 Apache Tomcat 8.5 버전을 기준으로 작성합니다. Apache Tomcat 디렉터리 구조 여기에서 다운로드받을 수 있는 Apache Tomcat 8.5.73.tar.gz 파일의 압축을 해제하면 위의 디렉터리 구조를 확인할 수 있습니다. 각 디렉터리에는 아래와 같이 특정 기능을 하는 파일들이 함께 저장되어 있습니다. 디렉터리명

[Network] HTTP란? [내부링크]

#20210407 #CS #Network #HTTP #Hypertext_Transfer_Protocol 이번 포스팅에서는 인터넷 상에서 데이터를 효과적으로 주고받기 위한 통신 프로토콜인 HTTP의 전반적인 내용에 대해 정리합니다. -목차- 1) HTTP 개요 2) HTTP가 동작하는 환경 및 구조 3) HTTP의 특징 4) HTTP Request Method 5) HTTP StatusCode HTTP 개요 HTTP(Hypertext Transfer Protocol)은 WEB 상에서 데이터를 주고받기 위해 사용되는 통신 프로토콜입니다. 우리가 인터넷을 이용해 다양한 웹사이트에 방문하고, 인터넷 쇼핑을 하거나 유튜브 동영상을 보는 등 다양한 미디어에 손쉽게 접근할 수 있는 이유는 바로 '하이퍼텍스트 Hypertext' 라는 개념 덕분입니다. 때로는 '하이퍼링크 Hyperlink' 라고 부르기도 하는데, '링크'라는 말처럼 이 텍스트는 다른 데이터에 접근할 수 있는 연결점이 된다는 것입니

[Network] OSI 참조 모델 (OSI 7 Layer) [내부링크]

#20210312 #CS #Network #OSI_7_Layer #OSI_Reference_Model OSI 참조 모델 개요 Open Systems Interconnection Reference Model OSI 참조 모델은 네트워크 시스템을 구성하기 위한 '표준'에 대한 내용을 규정하기 위해 설계되었습니다 자본주의 사회에서 데이터 통신 기술이 점점 발달하면서 각 기업은 독자적인 기술을 발전시켜왔습니다. 이에 따라, 서로 다른 통신 기술을 이용해 구성된 시스템간의 통신에서 호환성의 문제가 발생하게 되었습니다. 이에, 국제 표준을 담당하는 기구인 국제표준화기구(ISO)에서 네트워크 시스템에 대한 표준을 규정하였습니다. 이러한 결과물로 등장한 것이 바로 'OSI 참조 모델' 입니다. 즉, 한마디로 정리하자면 OSI 참조 모델이란, '서로 다른 시스템(HW, SW)간의 상호 연결을 용이하게 하기위해 규정된 표준 네트워크 시스템' 이라고 할 수 있습니다. OSI 참조 모델의 목적 OSI 참

[REST API] Roy Fielding 의 REST API 논문 번역 및 이해(4) [내부링크]

Roy Fielding의 박사 학위 논문 중 5장에 대한 번역 및 개인적인 이해를 정리한 글입니다. ※ 개인적으로 이해한 내용을 바탕으로 의역하기 때문에 개인적인 해석이 포함될 수 있습니다. Roy Thomas Fielding, "Architectural Styles and the Design of Network-based Software Architectures", 2000 본 포스팅의 내용은 아래 포스팅과 연결됩니다. Roy Fielding 의 REST API 논문 번역 및 이해(1) - REST 아키텍처의 제약조건 1~3 Roy Fielding 의 REST API 논문 번역 및 이해(2) - REST 아키텍처의 제약조건 4~6 Roy Fielding 의 REST API 논문 번역 및 이해(3) - REST 아키텍처의 구성요소 - Data Element REST의 Uniform Interface 제약조건을 충족시키기 위해 필요한 REST의 아키텍처 요소들인 Componen

[REST API] Roy Fielding 의 REST API 논문 번역 및 이해(3) [내부링크]

Roy Fielding의 박사 학위 논문 중 5장에 대한 번역 및 개인적인 이해를 정리한 글입니다. ※ 개인적으로 이해한 내용을 바탕으로 의역하기 때문에 개인적인 해석이 포함될 수 있습니다. Roy Thomas Fielding, "Architectural Styles and the Design of Network-based Software Architectures", 2000 본 포스팅의 내용은 아래 포스팅과 연결됩니다. Roy Fielding 의 REST API 논문 번역 및 이해(1) Roy Fielding 의 REST API 논문 번역 및 이해(2) 이번 5.2 절에서부터는 REST의 특징인 Uniform Interface 제약조건을 충족시키기 위해 필요한 REST의 아키텍처 요소들에 대해 설명한다. 여기에는 Component, Connector, Data 세 가지 요소가 있는데, 이번 포스팅에서는 Data 요소에 대해 자세히 다룬다. 5.2 REST Architectur

[REST API] Roy Fielding 의 REST API 논문 번역 및 이해(2) [내부링크]

Roy Fielding의 박사 학위 논문 중 5장에 대한 번역 및 개인적인 이해를 정리한 글입니다. ※ 개인적으로 이해한 내용을 바탕으로 의역하기 때문에 개인적인 해석이 포함될 수 있습니다. Roy Thomas Fielding, "Architectural Styles and the Design of Network-based Software Architectures", 2000 본 포스팅의 내용은 아래 포스팅과 연결됩니다. Roy Fielding 의 REST API 논문 번역 및 이해(1) 지난 포스팅까지 Client-Server, Stateless, Cache 세 가지 제약조건을 추가하면서 발생하는 장, 단점에 대해 파악하면서 REST 아키텍처 스타일을 구성하기 위한 기반을 확립하였다. Client-Server 제약조건을 추가함으로써 각각의 관심사를 분리하고, 독립적으로 발전할 수 있는 토대를 만들었다. 그러자, Client측과 Server측이 분리되어 서로간의 상호작용, 통신이

[REST API] Roy Fielding 의 REST API 논문 번역 및 이해(1) [내부링크]

스프링 프레임워크를 공부하던 중, RESTful 웹 서비스 개발에 대해 조금 더 깊게 공부해보고 싶은 생각이 들었다. 여러 기업들의 웹 개발자 채용 공고를 보면 이제는 REST API 설계 및 활용 능력은 거의 필수가 되어가고 있는 것 같다. 사실, REST API를 이용한 개발을 해보았음에도 불구하고 REST API가 근본적으로 무엇인지는 잘 모르고 있고, 누군가 나에게 "REST API가 뭐야?"라고 묻는다면 논리정연하게 설명할 자신이 없다. 인터넷 서칭을 해보면 REST API에 대한 다른 블로거들의 포스팅은 사실 굉장히 많다. 그러나 REST 아키텍처의 제한조건들에 대한 나열식의 내용, 단순한 사용방법을 다루는 글들이 많았다. REST API를 어떻게 사용하는 것이 잘 사용하는 것인가에 대한 의구심, 호기심이 생겨 REST API를 제안한 로이 필딩(Roy Fielding)의 박사 학위 논문을 직접 읽어보며 이해해보려한다. Roy Thomas Fielding, "Archite

[Spring] 01. Spring Framework란? [내부링크]

#20201022 #SpringFramework #스프링프레임워크 #스프링 벌써 한참 전부터 스프링 프레임워크에 대해 공부하고 싶었는데, 이제서야 시작한다. 우리나라 전자정부 표준프레임워크로도 사용되고, 자바 웹 개발자는 거의 필수적으로 사용할 수 있어야 하는 스프링 프레임워크 (Spring Framework). 오늘부터 차근차근 공부해보도록 한다. 스프링 프레임워크란? 스프링 프레임워크는 로드 존슨(Rod Johnson)의 <Expert One-on-One: J2EE Design and Development> 에 수록된 3만 줄 가량의 소스코드로부터 시작되었다고 한다. 스프링 프레임워크를 간단히 정의하면 J2EE를 이용한 개발을 더욱 쉽게 할 수 있도록 하는 경량급 오픈소스 애플리케이션 프레임워크 이는 스프링(Spring) 프레임워크라는 이름과도 연관이 있는데, 기존의 Java EE를 이용한 복잡한 개발방식을 더욱 쉽게하고 성능을 개선하고자 하는 목적으로 J2EE의 겨울 뒤에 봄(

[Spring] 02. Dependency Injection 의존성 주입의 개념 [내부링크]

#20201023 #SpringFramework #스프링프레임워크 #스프링 #DI #DependencyInjection #의존성주입 스프링에 대한 전반적인 개념과 특징에 대해 알아보았다. 그 중 의존성 주입 DI 의 개념을 예를 통해서 확실하게 파악해보고자 한다. 의존성 주입이란? 의존성 (Dependency) 을 간단하게 표현하면, 객체 사이의 관계 정도로 생각할 수 있다. 일반적으로 하나의 애플리케이션을 개발하기 위해 각 기능별로 모듈, 컴포넌트 등을 만들고, 이를 하나로 통합하여 전체적인 애플리케이션을 완성하는 방법을 사용한다. 이처럼 각 컴포넌트들을 통합하기 위해서는, 각 객체간의 관계를 설정, 즉 의존성 주입이 필요해진다. 이를 회원가입을 하는 상황을 예로 들어 살펴보도록 한다. 의존성 주입의 예 회원가입 회원가입을 수행하기 위해 다음의 세 가지 인터페이스가 있다. 1) MemberService : 회원 정보를 등록을 수행하는 인터페이스 2) MemberRepository

[Spring] 04. 의존성 주입(DI)의 다양한 방법 [내부링크]

#20201025 #SpringFramework #스프링프레임워크 #스프링 #DI #DependencyInjection #의존성주입 #세터인젝션 #컨스트럭터인젝션 #필드인젝션 스프링 프레임워크에서 의존성을 주입하는 방법으로는 다음의 세가지가 있다. 1) Field Injection 2) Setter Injection 3) Constructor Injection 이 세 가지 인젝션 방법은 XML기반, Java 기반, Annotation 기반으로 작성할 수 있는데, 그 사용법과, 특징에 대해 알아보려고 한다. Field Injection 필드 인젝션 필드 인젝션은 아주아주 간단하다. 말 그대로 Field 에 의존성을 주입하는 것인데, 다음과 같이 FieldInjection 클래스에서 AInjection, BInjection 을 주입하고자 하는 상황을 살펴보자. Field Injection 예 정말 간단하다. 단지 의존성을 주입하고자 하는 클래스를 필드로 선언한 후에 그 위에 @Autow

[Spring] 05. AOP (Aspect Oriented Programming)의 개념 [내부링크]

#20201029 #SpringFramework #스프링프레임워크 #스프링 #AOP #AspectOrientedProgramming #관점지향프로그래밍 #Aspect #JoinPoint #Advice #Pointcut #Weaving #Target 스프링프레임워크의 대표적인 기능으로 의존성 주입 (DI)와 관점 지향 프로그래밍 (AOP)가 있다고 했었다. 의존성 주입에 대해 간단하게 알아보았으니, 관점 지향 프로그래밍의 개념과 주요용어에 대해 알아본다. AOP의 개념 애플리케이션의 규모가 커짐에 따라, 소스코드의 여러 부분에서 중복되는 코드가 반복되는 일이 있다. 대표적인 예로, 로깅 Logging 이 있다. 아래와 같이 어떤 메서드를 실행하기 전, 후로 메서드의 시작과 끝을 로그에 남기는 코드를 작성했다고 하자. public String ExampleMethod(String input) { log.debug("[Method Start]: ExampleMethod | Paramete

[Spring] 07. 포인트컷 표현식 Pointcut Expression [내부링크]

#20201030 #SpringFramework #스프링프레임워크 #스프링 #AOP #AspectOrientedProgramming #관점지향프로그래밍 #포인트컷표현식 #PointcutExpression #Pointcut AOP를 이용할 때, 여러 모듈에서 공통적으로 실행되는 코드, 즉 '횡단 관심사'를 실행할 조인 포인트를 선별하기 위하여 포인트컷 표현식을 사용한다. 이번에는 이 포인트컷 표현식의 다양한 사용방법에 대해 정리한다. 사용방법 사용방법에는 이전 포스팅에서도 잠깐 다루었지만, 한번 더 간단히 정리한다. 방법에는 Java기반 설정방식과 XML기반 설정방식이 있다. Java기반 설정방식 @Aspect // 해당 컴포넌트가 Aspect 로 식별되도록 @Component // 컴포넌트 스캔 대상이되어 DI 컨테이너에서 관리되도록 public class MethodLoggingAspect { @Before("execution(* com.example.*.*.*(..))") pub

[Spring] 08. 데이터 바인딩 (Data Binding) 의 개념 [내부링크]

#20201101 #SpringFramework #스프링프레임워크 #스프링 #DataBinding #데이터바인딩 #DataBinder #ServletRequestDataBinder #Converter #PropertyEditor #Formatter 여러 블로그, 공식 문서, 책 등을 참고하여 이해한 내용을 바탕으로 작성한 글입니다. 내용의 오류에 대한 지적은 언제나 환영합니다! 오늘은 Spring Framework의 핵심 기술, Spring Core의 한가지인 데이터 바인딩 (Data Binding) 에 대해 알아본다. 데이터 바인딩이란? What is Data Binding? 데이터 바인딩 Data Binding 이란 개념은 스프링 프레임워크에서 뿐만 아니라 자바스크립트, 안드로이드 등 아주아주 다양한 분야에서 사용되는 기술이다. 스프링 프레임워크에서의 데이터 바인딩의 정의는 다음과 같다. 자바 빈즈의 프로퍼티에 외부에서 입력된 값을 설정하는 과정 ※ 자바빈즈 관련 참고 https

[Spring] 09. 형 변환(Type Conversion) - PropertyEditor, Converter, Formatter [내부링크]

#20201101 #SpringFramework #스프링프레임워크 #스프링 #DataBinding #데이터바인딩 #Converter #propertyEditor #Formatter 여러 블로그, 공식 문서, 책 등을 참고하여 이해한 내용을 바탕으로 작성한 글입니다. 내용의 오류에 대한 지적은 언제나 환영합니다! 지난 포스팅에 이어 데이터 바인딩을 할 때, 자바빈즈 (Java Beans) 의 프로퍼티 타입에 맞게 입력된 값을 형 변환 (Type Conversion) 하는 몇 가지 방법에 대해 알아본다. PropertyEditor Interface 스프링에서 자바빈즈를 조작(Manipulation)할 때, BeanWrapper 라는 인터페이스 또는 이를 구현한 BeanWrapperImpl 클래스를 이용한다고 한다. 대표적으로, 자바빈즈 프로퍼티의 값을 읽고(get) 쓰는(set) 경우에 이용한다. 말 그대로, Bean을 Wrap하여 Bean에 대한 작업을 처리하는데 사용한다. 그러나 이

[Spring] 10. 스프링 JDBC 연동 (DBCP이용 + MySQL) [내부링크]

#20201107 #SpringFramework #스프링프레임워크 #스프링 #스프링JDBC #JDBC #JdbcTemplate #DBCP #ConnectionPool #스프링MySQL연동 이번 포스팅에서는 스프링을 이용한 개발이 아니더라도 어떤 애플리케이션을 사용할 때 항상 있어야 하는, '데이터'를 다루는 방법에 대해서 알아보도록 한다. 스프링 프레임워크에서 데이터에 접근하는 방법을 효과적으로 하기 위해 제공하는 Spring JDBC 관련 기능에 대해 알아본다. 목차 포스팅은 다음의 순서로 진행된다. 1) Data Source의 종류 2) XML기반 DataSource 설정방법 3) Spring JDBC의 개념 4) Spring JDBC를 이용한 DataSource 연동 Data Source JDBC를 활용하는 방법을 알아보기 전에 Data를 실질적으로 가지고 있는 데이터베이스와 애플리케이션을 연결해야 하는데, 여기서 데이터베이스, 즉 Data의 Source를 설정하는 방법을 알아

[Spring] 12. Spring JDBC - RowMapper를 활용한 조회결과 매핑 [내부링크]

#20201109 #SpringFramework #스프링프레임워크 #스프링 #스프링JDBC #JDBC #JdbcTemplate #RowMapper #BeanPropertyRowMapper JdbcTemplate 클래스를 이용하여 SQL질의를 할 때, 조회 결과를 사용자가 정의한 클래스의 인스턴스 형태로 리턴하게 할 수 있다. 이 때, 사용되는 인터페이스가 RowMapper이다. RowMapper 인터페이스를 구현하여 SQL 조회 결과의 ResultSet을 POJO 형태로 변환해보도록 한다. 또, RowMapper 인터페이스를 직접 구현하지 않고도 자바의 리플렉션 Reflection 기능을 이용하여 자동으로 매핑해주는 방법 또한 알아본다. RowMapper Interface @FunctionalInterface public interface RowMapper<T> { @Nullable T mapRow(ResultSet rs, int rowNum) throws SQLException;

[Spring] 13. 트랜잭션 관리자 (개념, 종류, 설정방법) [내부링크]

#20201112 #SpringFramework #스프링프레임워크 #스프링 #Transaction #TransactionManager #LocalTransaction #GlobalTransaction 최근의 포스팅에서 스프링 JDBC를 이용하여 DB를 조작하는 방법에 대해 알아보았다. 그런데 DB의 데이터를 조작할 때, 즉 DB의 상태를 변화시킬 때에는 항상 트랜잭션 단위로 작업을 처리하여야 한다. 스프링에서는 이러한 트랜잭션 처리를 쉽게 구현할 수 있도록 하는 Spring Transaction 에 대해서 알아보도록 한다. Transaction이란? 우선 트랜잭션의 정의와 그 특징에 대해 확실히 이해하고 넘어가도록 한다. 트랜잭션 Transaction 이란, "DBMS에서 데이터를 다루는 논리적인 작업의 단위"를 말한다. 하나 이상의 SQL문을 순차적으로 수행하는 일련의 처리 작업인 것이다. 트랜잭션은 다음의 4가지 특징을 가진다. 원자성 (Atomiticy) - 트랜잭션에 포함된

[Spring] 14. 선언적 트랜잭션 (어노테이션 기반, XML기반 설정 방식) [내부링크]

#20201112 #SpringFramework #스프링프레임워크 #스프링 #Transaction #TransactionManager #선언적트랜잭션 직전 포스팅에서 TransactionManager의 개념과 종류, 그리고 빈 설정방법에 대해 알아보았다. 이렇게 TransactionManager 빈을 등록하였으면, 트랜잭션 관리자가 트랜잭션을 관리할 수 있도록 트랜잭션을 관리해야 하는 부분을 알려주어야 한다. 이 때, 사용할 수 있는 방법으로 선언적 트랜잭션 방법과 명시적 트랜잭션 방법이 있는데 이번에는 선언적 트랜잭션에 대해서 알아보겠다. 선언적 트랜잭션 선언적 트랜잭션은 미리 선언된 RollBack Rule에 따라서 트랜잭션을 처리하는 방법이다. 미리 정해진 룰에 따라서 처리하기 때문에, 트랜잭션의 시작, Commit, RollBack 등을 비즈니스 로직과 분리할 수 있다는 장점이 있다. 선언적 트랜잭션은 ①어노테이션 방식과 ②XML방식, 두 가지 방법으로 사용할 수 있다. 먼저

[Spring] 15. 명시적 트랜잭션 (TransactionTemplate, PlatformTransactionManager 이용) [내부링크]

#20201118 #SpringFramework #스프링프레임워크 #스프링 #Transaction #TransactionManager #PlatformTransactionManager #TransactionTemplate #TransactionCallBack #명시적트랜잭션 스프링에서 트랜잭션을 사용하는 방법으로 선언적 트랜잭션과 명시적 트랜잭션 두 가지가 있다. 선언적 트랜잭션의 경우, 메서드나 클래스에 @Transactional 어노테이션을 부여하여 사용했다. 따라서, 메서드보다 작은 단위에 대해서는 트랜잭션의 적용이 불가하다. 만약 메서드 단위보다 더 작은 단위로 트랜잭션을 제어하고 싶다면 소스코드 내에 직접 트랜잭션 관련 코드를 작성하는 명시적 트랜잭션을 이용하면 된다. 명시적 트랜잭션 Programmatic Transaction 스프링 프레임워크 공식 문서에서는 Programmatic Transaction 이라는 표현을 사용한다. 선언적 트랜잭션이 어노테이션을 이용한 방법이

[Spring] 17. 스프링 MVC 패턴 (feat. Front Controller 패턴) [내부링크]

#20201120 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #ModelViewController #PageControllerPattern #FrontControllerPattern 오늘부터는 유명한 디자인 패턴 중 하나인 MVC패턴에 대해서 다룬다. MVC패턴의 기초적인 개념을 다룬 후에 스프링에서의 MVC패턴에 대해 조금 더 자세히 알아보도록 한다. MVC 패턴 MVC 패턴은 Model - View - Controller 의 약자로 소프트웨어 디자인 패턴 중 하나이다. MVC 패턴은 스프링 프레임워크에서 뿐만 아니라 Django, CodeIgniter, Node.js 등 다양한 프레임워크에서 주로 채택하고 있는 패턴이다. 이렇게 많은 프레임워크에서 주요한 패턴으로 인식하고 구현하고 있는 이유를 추측해보자면, 웹 애플리케이션의 흐름과 데이터를 Model, View, Controller로 각각 분리하여 처리하기 때문에 개발 및 유지보수가 편리

[Spring] 18. 스프링 MVC, 프론트 컨트롤러 패턴 [내부링크]

#20201127 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #FrontControllerPattern #프론트컨트롤러패턴 #DispatcherServlet 앞선 포스팅에서 MVC패턴과 스프링에서의 MVC패턴에 대해 다루었다. 스프링에서 MVC패턴은 특히 프론트 컨트롤러 패턴으로 이루어져 있다고 했는데, 이를 구성하는 각각의 컴포넌트에 대해 조금 더 자세히 살펴보도록 한다. 스프링 MVC의 Front Controller Pattern 스프링 MVC의 프론트 컨트롤러 패턴의 전반적인 처리흐름이다. 여기에서 각각의 컴포넌트 하나하나가 각각 어떤 역할을 하는지, 조금 더 자세히 알아보도록 한다. DispatcherServlet DispatcherServlet 클래스는 애플리케이션에 들어오는 모든 요청을 받아 처리한다. 이렇게 요청을 받은 후에 사용자에게 응답할 때까지의 모든 처리는 DispatcherServlet을 중심에 두고 다양한 인터페이스와

[Spring] 19. Spring MVC DispatcherServlet의 계층구조 (ApplicationContext 계층구조) [내부링크]

#20201128 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #DispatcherServlet #ApplicationContext 스프링 MVC의 가장 핵심적인 컴포넌트를 하나 꼽으라고 하면, 모든 요청, 응답과 관련되어 있는 DispatcherServlet 일 것이다. 이러한 DispatcherServlet의 역할과 기능에 대해서 알아보았는데 실제로 스프링 컨테이너가 이를 인식하고 관리할 수 있도록 연계하는 방법에 대해서, 그리고 DispatcherServlet의 계층 구조를 알아보도록 한다. DispatcherServlet is a kind of Servlet 스프링 MVC를 이용하기전에 웹 애플리케이션의 개발은 "서블릿 환경"에서 진행했다. 아파치 톰캣과 같은 서블릿 컨테이너의 도움으로 클라이언트로부터의 요청을 수신하고, '서블릿'이라는 객체를 이용해 요청을 처리할 수 있었다. 서블릿 컨테이너를 구동하면 배포설명자 web.xml 파일을

[Spring] 20. @Controller(1) - 웹 애플리케이션의 종류와 컨트롤러 [내부링크]

#20201228 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #웹애플리케이션의종류 #Controller #RestController #컨트롤러 굉장히 오랜만에 포스팅을 하는 것 같다.ㅎㅎ.. 직전 포스팅까지 스프링 MVC패턴이 내부적으로 어떻게 구현되고 있는지에 대해 알아보았다. 이제 이런 이론적인 부분보다는 실제로 MVC패턴을 적용하여 애플리케이션을 만드는 방법에 대해 알아본다. 그 중에서도 MVC패턴을 이루는 주요 컴포넌트인 컨트롤러 Controller에 대해서 자세히 알아보겠다. 웹 애플리케이션의 종류 컨트롤러에 대해 다루기 이전에 스프링을 이용해서 개발할 수 있는 웹 애플리케이션의 종류에 대해 먼저 알아보자. 웹 애플리케이션은 크게 두 가지로 구분될 수 있다. 화면으로 응답하는 애플리케이션 데이터로 응답하는 애플리케이션 위의 두 가지 응답방식의 차이는 명확하다. 화면으로 응답하는 애플리케이션은 우리가 항상 보고 이용하고 있는 웹페이

[Spring] 21. @Controller(2) - 핸들러 메서드의 매개변수타입 [내부링크]

#20201229 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #Controller #컨트롤러 #핸들러메서드의매개변수타입 #Model #RedirectAttributes Class-level의 어노테이션인 @Controller 또는 @RestController로 컨트롤러 클래스를 작성하고, 이 컨트롤러 클래스 안에 핸들러 메서드를 작성하여 요청에 대한 실질적인 작업을 처리하게 된다. 이 때, 핸들러 메서드의 매개변수에는 다양한 것들이 올 수 있는데, 이번 포스팅에서는 이에 대해 다뤄보도록 한다. 큰 틀에서 보자면, 핸들러 메서드의 매개변수는 다음의 세 가지 유형으로 나눠볼 수 있었다. 1) Servlet 환경에서의 요청/응답과 관련된 매개변수 타입 2) org.springframework 패키지에서 제공하는 매개변수 타입 3) java 패키지에서 제공하는 매개변수 타입 Servlet 환경에서의 요청/응답과 관련된 매개변수 타입 핸들러 메서드는

[Spring] 23. @Controller(4) - 핸들러 메서드의 반환값과 어노테이션 [내부링크]

#20201230 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #Controller #컨트롤러 오늘은 컨트롤러의 핸들러 메서드에서 사용할 수 있는 반환값의 종류에 대해서 알아보도록 한다. 핸들러 메서드의 반환값의 종류 java.lang.String ㆍ이동 대상의 View 이름을 반환한다. ㆍ이 때, 반환값으로 주어진 String 형태의 View 이름은 ViewResolver에 의해 실질적으로 이동할 대상으로 해석된다. ㆍ또, 핸들러 메서드 내의 Model 객체를 함께 전달하여 이동 대상에서 Model을 사용할 수 있다. @RequestMapping("/") public String home(Model model) { model.addAttribute("test", "스프링"); return "index"; } 위의 예의 경우, "index" 를 반환하였는데 스프링 컨테이너에 등록되어 있는 ViewResolver의 구현체 Bean이 어떻게 정의

[Spring] 24. @RequestMapping - 요청 매핑 조건을 지정하는 어노테이션 [내부링크]

#20201231 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #Controller #컨트롤러 #@RequestMapping 스프링 컨트롤러에서 특정 요청 URL에 대해 핸들러 메서드를 매핑하기 위해서 @RequestMapping 어노테이션을 이용했었다. 지금까지는 요청 경로를 지정하는 value 속성만을 이용했었는데, @RequestMapping 에서 사용가능한 다양한 속성들에 대해 알아보도록 한다. @RequestMapping 우선 @RequestMapping 어노테이션을 간단하게 정리하자면 다음과 같다. ㆍ사용 목적 : 클라이언트의 요청 URL에 대응하는 핸들러 메서드를 찾아 요청을 위임하기 위해 사용 (매핑 조건 지정) ㆍ사용 위치 : Class-level, Method-level ㆍ매핑조건의 결정기준 : ①URL에 따라 ②HTTP 요청방식에 따라 ③요청 파라미터에 따라 ④요청 헤더에 따라 ⑤미디어 타입에 따라 ㆍ속성 : value, p

[Spring] 26. View(2) - 스프링 MVC에서 지원하는 View의 종류 [내부링크]

#20210104 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #View 이전 포스팅에서 스프링 MVC에서 제공하는 View와 ViewResolver 인터페이스의 개념에 대해 알아보았다. 이번에는 View의 종류에 대해 살펴보도록 한다. 이번 포스팅에서 다루는 내용은 공부를 하면서도 지금 당장 필요한 내용은 아닌 것 같다는 생각이 들었다,, 내 수준에 비해 너무 깊게 공부한 것 같다..ㅎ 나중에 도움이 될 거라 믿고 기록하는 용도로 포스팅한다. View 인터페이스의 계층구조 위의 그림에서도 확인할 수 있듯이, 스프링 MVC에서 제공하는 모든 View는 AbstractView라는 추상 클래스를 상속하고 있는 형태였다. 그 SubClass 또한 View의 기능 및 역할에 따라 추상화된 형태로 구현되어 있었다, 참, 이런걸 어떻게 다 만들었을까 싶다.. 대단하다 정말..... 한 가지 알아둘 점으로는 AbstractView의 서브클래스들, 즉 모든

[Spring] 27. View(3) - 스프링 MVC에서 지원하는 ViewResolver의 종류 + ViewResolver Chaining [내부링크]

#20210106 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #MVC패턴 #ViewResolver #ViewResolver_Chaining 이번 포스팅에서는 컨트롤러의 핸들러 메서드에서 반환한 String 형태의 View name을 이용해서 실질적인 View 객체를 찾아주는 ViewResolver 의 종류에 대해 다룬다. ※ 이번 포스팅은 View에 대해 다룬 이전 포스팅을 읽은 후에 참고하시면 더 좋을 것 같습니다. ViewResolver 인터페이스의 계층구조 View 인터페이스에서 했던 것과 동일하게 ViewResolver 인터페이스의 상속관계를 나타내어보았다. 그 결과, ViewResolver 인터페이스는 크게 세 가지로 분류할 수 있었다. ① BeanNameViewResolver - 현재 Application Context에 등록된 Bean name을 이용해 View name을 해석한다. - View name과 동일한 Bean을 찾아 해당 View

[Spring] 29. 스프링 JSP 태그 라이브러리와 <spring:message> 태그 [내부링크]

#20210130 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #JSP태그라이브러리 #스프링커스텀태그라이브러리 #<spring:message>태그 #스프링메시지태그 지난 포스팅에서 스프링 form 태그 라이브러리에 대해 알아보았다. 이번에는 스프링에서 제공하는 또 다른 커스텀 태그 라이브러리인 Spring's JSP 태그 라이브러리에 대해 알아보도록 한다. Spring's JSP 태그 라이브러리는 Spring's form 태그 라이브러리와 함께 스프링 MVC 패턴을 이용해 애플리케이션을 개발할 때 JSP의 구현을 용이하게 하는 것이 목적이다! Spring's JSP 태그 라이브러리 스프링에서 제공하는 Spring's JSP 태그 라이브러리는 <spring:xxx> 와 같이 spring 이라는 접두어로 사용할 수 있다. 다른 태그 라이브러리와 동일하게 이를 사용하기 위해서는 아래의 taglib 지시문(directive)를 작성하여야 한다. <%@ taglib

[Spring] 31. 스프링에서의 예외처리(2) - HandlerExceptionResolver [내부링크]

#20210203 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링예외처리 #ExceptionHandling #HandlerExceptionResolver 지난 포스팅에 이어 스프링에서의 예외처리방법에 대해 알아본다. 지난 포스팅에서는 서블릿 컨테이너의 <error-code>요소를 이용했는데, 이번에는 HandlerExceptionResolver를 이용한 예외처리 방법에 대해 다룬다. HandlerExceptionResolver? DispatcherServlet과 다양한 인터페이스의 상호작용 스프링 프레임워크는 프론트 컨트롤러 패턴을 채택했다. DispatcherServlet 이라는 프론트 컨트롤러가 요청을 받고, 이를 각각의 Handler에 매핑시키는 구조이다. 그렇기 때문에 ①요청을 매핑하는 도중 발생하는 예외와 ②핸들러 메서드 내의 비즈니스 로직 처리 중 발생하는 예외는 프론트 컨트롤러인 DispatcherServlet과 상호작용하는 Handler

[Spring] 32. 스프링 RESTful 웹 서비스 이해 및 개발환경 구성하기 [내부링크]

#20210321 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RestfulWebService #RESTAPI #HttpMessageConverter 이번 포스팅에서는 스프링을 이용해 RESTful한 웹 서비스를 개발할 수 있는 방법에 대해 다룹니다. 즉, 지금까지는 '화면으로 응답하는 애플리케이션'에 대해 다루었다면, 이제부터는 '데이터로 응답하는 애플리케이션'에 대해 다룹니다. 두 방식 모두 스프링 MVC 아키텍처를 이용하여 작동되지만, 사용되는 컴포넌트에서 조금의 차이가 발생합니다. 우선, 프레임워크 아키텍처 측면에서 발생하는 차이점에 대해 이해한 후, RESTful한 웹 서비스를 개발하기 위한 환경을 구성하기 위해 필요한 설정에 대해 알아보겠습니다. Spring MVC Architecture for RESTful Web Service JSP와 같은 화면으로 응답하는 애플리케이션의 경우, 아래와 같은 프레임워크 아키텍처를 이용합니다.

[Spring] 34. HttpMessageConverter 커스터마이징 방법 [내부링크]

#20210323 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RestfulWebService #RESTAPI #HttpMessageConverter 이번 포스팅에서는 HttpMessageConverter를 커스터마이징하는 방법에 대해 알아보겠습니다. 이 때, 자바 기반 설정방식과 Xml기반 설정방식을 모두 살펴보도록 하겠습니다. ※ HttpMessageConverter의 종류와 기본적인 등록방법에 대해서는 이전포스팅을 확인하면 됩니다. 자바 기반 설정 방식 먼저 자바 기반 설정방식에서 커스터마이징 하는 방법을 설명합니다. WebMvcConfigurationSupport 클래스 스프링 MVC 구조가 동작하기 위한 설정을 하기 위해서는 WebMvcConfigurationSupport 클래스가 필요합니다. 보통의 경우 @EnableWebMvc 어노테이션을 @Configuration 어노테이션을 부여한 설정 클래스에 부여하게 되면 WebMvcC

[Spring] 35. 스프링 HiddenHttpMethodFilter [내부링크]

#20210323 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RestfulWebService #RESTAPI #HiddenHttpMethodFilter 이번 포스팅에서는 REST API를 이용한 웹 서비스 개발을 조금 더 용이하게 해주는 HiddenHttpMethodFilter 에 대해 다룹니다. 필요성 HiddenHttpMethodFilter가 무엇인지 알기 위해서, 이 필터를 사용하는 이유, 필요성에 대해 먼저 알아보도록 하겠습니다. 조금 더 RESTful한 웹 서비스를 개발하기 위해서는, REST 아키텍처 스타일을 준수하면서 API를 설계해야 합니다. 이 때, REST 아키텍처 스타일 중 Unifom Interface를 준수하는 것과 관련하여, 한 가지 문제점이 발생합니다. REST에서는 URL를 통하여 자원을 조작하게 됩니다. 이 때, 동일한 URL이더라도 HTTP Method에 따라 그 기능을 다르게 구현할 수 있도록 합니다.

[Spring] 36. 스프링 CORS - 설정방법을 중심으로 [내부링크]

#20210417 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링CORS #CORS #CrossOriginResourceSharing 이번 포스팅에서는 스프링 프레임워크를 이용할 때, CORS를 지원하도록 설정하는 방법에 대해 알아보도록 합니다. ※ CORS에 대한 내용은 다음의 포스팅을 참고하시길 바랍니다. CORS와 SOP 여기에서는 CORS에 대한 개념적인 내용이 아닌, 스프링 프레임워크에서 CORS 기능을 사용하는 방법에 대해서만 다루도록 합니다. 스프링에서의 CORS 지원 보안상의 이유로, 웹 브라우저는 현재 Origin 외의 다른 Origin의 리소스에 대한 AJAX 요청을 금지합니다. CORS는 대부분의 브라우저에서 구현되는 W3C 사양으로 어떤 도메인으로부터 요청을 허용할 것인지 지정할 수 있도록 하는 메커니즘입니다. IFRAME, JSONP와 같은 방식으로도 서로 다른 도메인 간 요청을 허용할 수 있지만, CORS를 사용하는 것이 더

[Spring] 38. 스프링에서 URI 조립을 위한 UriComponentsBuilder [내부링크]

#20210425 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #URI #UriComponents #UriComponentsBuilder #URI_Encoding #ServletComponentsBuilder 이번 포스팅에서는 스프링 프레임워크를 사용할 때, URI를 손쉽게 생성할 수 있도록 도와주는 UriComponentsBuilder에 대해 알아보겠습니다. -목차- 1) URI의 개념과 UriComponentsBuilder의 필요성 2) UriComponents 클래스 3) UriComponentsBuilder 클래스 4) UriComponentsBuilder 사용 예 5) URI Encoding의 두 가지 종류 6) ServletUriComponentsBuilder 클래스 - 현재 요청의 URI를 재사용! ※ 사용법을 알고싶으신 분들은 바로 [4)UriComponentsBuilder 사용 예]로 넘어가시면 됩니다. URI의 개념과 UriComponen

[Spring] 40. RestTemplate - 개념부터 활용까지 [내부링크]

#20210428 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링REST #RESTAPI #RestTemplate #RestClient 지금까지 몇 개의 포스팅을 통해서 REST API를 더 효과적으로 만들 수 있는 스프링의 몇 가지 컴포넌트에 대해 알아보았습니다. ① 스프링 RESTful 웹 서비스 아키텍처 ② HttpMessageConverter - 자바 객체 ↔ 응답 본문 변환 컴포넌트 ③ HiddenHttpMethodFilter - form 태그에서 GET, POST 외의 HTTP Method 지원 위한 컴포넌트 ④ Spring CORS 지원 ⑤ UriComponentsBuilder - 문자열 형태의 URI를 보다 효율적으로 조립할 수 있도록 하는 컴포넌트 ⑥ REST API 예외처리 이번 포스팅에서는 이렇게 만들어낸 REST API를 효과적으로 호출하여 사용할 수 있도록 하는 REST Client에 대해 알아보도록 하겠습니다. -목차- 1)

[Spring] 41. 세션을 이용하는 다양한 방법 (@SessionAttributes, @SessionScope) [내부링크]

#20210502 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링세션 #세션 #Session #@SessionAttributes #@SessionAttribute #@SessionScope 이번 포스팅에서는 스프링 프레임워크를 이용할 때, 세션을 다루는 세 가지 방법에 대해 다루어봅니다. 세션이 설정되는 원리보다는 사용방법 위주로 작성합니다. -목차- 1) 개요 2) @SessionAttributes와 @SessionAttribute 3) @Scope와 @SessionScope 4) HttpSession API 개요 HTTP는 기본적으로 Connectionless하며, Stateless합니다. 그렇기 때문에, 여러 요청간에 동일한 데이터를 다룰 수 없는 구조가 됩니다. 이를 보완하기 위한 하나의 방법으로 HTTP Session 을 이용할 수 있는데, 스프링 프레임워크에서 이러한 HTTP Session를 보다 효과적으로 사용할 수 있도록 하는 요소들에

[Spring] 43. 단일/다중 파일 업로드 사용예제 [내부링크]

#20210505 #SpringFramework #스프링프레임워크 #스프링 #스프링MVC #스프링파일업로드 #파일업로드 #MultipartResolver #MultipartFile #사용예제 지난 포스팅에서 알아보았던 스프링 프레임워크에서의 파일 업로드 기능을 실제로 구현해보도록 하겠습니다. 사용예제 라이브러리 추가 먼저, 사용하려는 방법에 따라 라이브러리를 추가해줍니다. ② Apache Commons FileUpload 라이브러리의 경우 다음의 의존성을 추가해주면 됩니다. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> Bean 등록 그 후, Mul

[Security] JWT(JSON Web Token) - JWT는 JWS가 아니다. (feat. JWS, JWE) [내부링크]

-목차- 1) Overview 2) What is a JWT? 3) JWS vs. JWE 4) JWS Structure 5) JWE Structure 6) Conclusion Overview 사실 지금까지 사용자 인증 방식으로 JWT를 사용해야 할 이유를 찾기 위해 아래의 내용들을 학습해왔습니다. [Security] 인증 Authentication - 개념, 종류, 방법론, 프로토콜 [Security] 권한 부여 전략 Authorization strategies [Security] 웹 기반 환경에서의 사용자 인증 방식 [Security] 토큰 기반 인증 방식 처음 두 포스팅에서는 가장 기초가 되는 인증, 인가의 개념에서부터, 보다 안전하고 효율성있게 인증, 인가를 수행하기 위한 여러 가지 내용들을 다루어보았습니다. 그 후, 웹 기반 환경에서 사용될 수 있는 다양한 인증 방식을 알아보고 각각의 특징 및 장단점을 파악하고 비교해보았습니다. 처음부터 답은 나와있었지만, 역시나 여러 인증

TIL 2022-07-15 [내부링크]

# Today I Learned ----------------------------------------------- JWT, JWS, JWE 후우 오늘도 JWT.... 자세히 찾아보고 알아가는게 유익하긴 한데 이렇게 시간을 투자해도 되나 싶다.^...^

TIL 2022-07-16 [내부링크]

# Today I Learned ----------------------------------------------- H2GIS, MySQL의 Spatial Query 조사 팀 프로젝트 Laundry_Platform API 개발 MyBatis Sql Injection 방지 @SqlInjectionSafe H2(테스트/개발), MySQL(운영)에서 Spatial Query 사용시 문법 호환되지 않는 문제 해결방법 고민 방법 1 H2GIS extension을 이용해 Spatial Query 사용 H2 alias를 이용해 MySQL Spatial function명과 동일하게 변경 방법 2 필요한 함수를 Java로 직접 구현하여 H2 사용자 정의 함수로 생성

TIL 2022-07-17 [내부링크]

# Today I Learned ----------------------------------------------- 팀 프로젝트 Laundry_Platform 빨래방 목록 검색 API 개발 API 하나 개발하는게 즈응말 오래걸린다. 아직 초기라 설정할 것도 많고 라이브러리 조사할 것도 많아서 그런 것 같기도 하다.. 그래도 계속 궁금한게 생기고 알아가는게 있으니 도움이 많이 되는 것 같다.

[Security] 권한 부여 전략 Authorization strategies [내부링크]

Overview 어떤 클라이언트에게 어떤 권한이 있는지에 대해 판단하는 것은 순전히 시스템 관리자, 운영자가 결정해야 할 몫이며, 안전한 리소스 관리를 위해 사용자에 대한 권한 관리는 매우 중요합니다. 시스템의 규모가 커질수록, 권한 부여에 대한 정책이 복잡할수록 이를 일관성있고 안전하게 관리하는 것은 점점 어려워질 것 입니다. 이를 위해 일반적으로 권한 관리 전략 Authorization strategies을 수립하여 권한을 부여하고 관리합니다. 이번 포스팅에서는 이러한 권한 관리 전략에는 어떠한 것들이 있는지 알아보도록 하겠습니다. What is the Authorization? 위 그림에서 볼 수 있듯이 Authorization은 어떠한 리소스, 기능으로의 접근이 가능한지 여부를 확인하는 일련의 프로세스를 말하며, 일반적으로 인증 이후에 이루어집니다. Authorization strategies 1. ABAC (Attribute-based access control) 속성 기반

TIL 2022-07-09 [내부링크]

# Today I Learned ----------------------------------------------- 권한 부여 전략 Authorization strategies ABAC (Attribute-based access control) RBAC (Role-based access control) ReBAC (Relation-based access control) 아 어제 술을 엄청 자셨더니 힘들어 죽겠다.. 하루가 꼬박 지났는데 아직도 안 깬거 같네...............

[Security] 웹 기반 환경에서의 사용자 인증 방식 [내부링크]

Overview 지금까지 아래의 두 포스팅을 통해 인증 Authentication과 인가 Authorization의 개념 및 유형, 방법론 등에 대해 알아보았습니다. [Security] 인증 Authentication - 개념, 종류, 방법론, 프로토콜 [Security] 권한 부여 전략 Authorization strategies 이를 바탕으로 이번 포스팅에서는 웹 기반 환경에서는 이를 어떻게 수행할 수 있는지에 대해 알아보도록 하겠습니다. -목차- 1) Overview 2) What we focus on? 3) HTTP Basic Authentication 4) HTTP Digest Authentication 5) Session-based Authentication 6) Token-based Authentication 7) OTP (One-time passwords) 8) OAuth/OAuth2.0 (OpenID Authentication) 9) Comparison & Concl

TIL 2022-07-10 [내부링크]

# Today I Learned ----------------------------------------------- 웹 기반 환경에서의 인증 방법 HTTP Basic authentication HTTP Digest authentication Session-based authentication Token-based authentication OTP (One-time passwords) OAuth/OAuth2.0 SAML 술이 안 깬건 줄 알았는데.. 콧물이 자꾸 나는 걸 보니 코로나 걸린 것 같은데?....... 재확진......?

TIL 2022-07-11 [내부링크]

# Today I Learned ----------------------------------------------- Spring 학습 MockMvc를 이용한 Controller layer Unit test 방법 팀 프로젝트 Laundry_Platform API 설계 내용 일부 변경 및 개발

TIL 2022-07-12 [내부링크]

# Today I Learned ----------------------------------------------- 팀 프로젝트 Laundry_Platform API 개발 진행 팀 프로젝트를 시작한지 상당히 오랜 시간이 지났는데.. 도통 진행이 되지 않는다... 그냥 가볍게 생각해야겠다. 내 공부에 집중해야겠다..

[Security] 토큰 기반 인증 방식 [내부링크]

Overview 여기에서 웹 기반 환경에서 사용할 수 있는 여러 가지 인증 방식을 알아보았습니다. 보안성 및 사용자 편의성 등을 고려했을 때, 토큰 기반 인증 방식이 가장 적합하다고 생각이 들었습니다. 그래서 이번에는 이러한 토큰 기반 인증 방식에 대해 조금 더 자세하게 알아보도록 하겠습니다. (JWT에 대한 내용을 다루는 포스팅이 아닙니다.) -목차- 1) Overview 2) What is a token? 3) Authentication Process 4) Pros & Cons 5) Conclusion What is a token? https://www.okta.com/kr/identity-101/security-token/ 토큰 기반 인증을 이해하기 위해서는 당연히 토큰 Token 이 무엇인지 알아야 합니다. 간단히 말하면 토큰이란, 사용자 인증을 위해 사용되는 인증 주체에서 생성하는 임의의 문자열을 말합니다. 이러한 토큰은 다양한 방식으로 사용자에게 전달되고, 사용자는 이 값

TIL 2022-07-13 [내부링크]

# Today I Learned ----------------------------------------------- Token-based authentication 개념, 프로세스, 다른 인증 방식 대비 장단점 JWT (JSON Web Token) PASETO (Platform-Agnostic SEcurity TOkens)

TIL 2022-07-14 [내부링크]

# Today I Learned ----------------------------------------------- JWT (JSON Web Token) 오늘은 반성을 좀 해야겠군.. JWT 공식문서 읽는데에 시간을 너무 쏟았다..

TIL 2022-06-28 [내부링크]

# Today I Learned ----------------------------------------------- Directory Structure 구성 방법 Presentation-Domain-Data Layering 학습 팀 프로젝트 Laundry_Platform 주간회의 진행 API문서 작성 계획 수립

TIL 2022-06-29 [내부링크]

# Today I Learned ----------------------------------------------- 과제전형 리팩터링 및 마무리, README 작성 팀 프로젝트 Laundry_Platform UI 설계 추가 진행 오늘 1주일간 개발한 과제를 제출했다. 결과가 좋으면 더 좋겠지만, 과제를 진행하면서 많은 것에 대해 깊게 탐구해볼 수 있어서 만족한다. ㅎ-ㅎ

TIL 2022-07-01 [내부링크]

# Today I Learned ----------------------------------------------- 팀 프로젝트 Laundry_Platform API 문서 자동화 툴 조사 API 문서 작성 양식 보완 RESTful한 검색 API 설계방법 조사

TIL 2022-07-02 [내부링크]

# Today I Learned ----------------------------------------------- 엘라스틱서치 학습 RDBMS와의 차이 강점 및 약점 엘라스틱서치, 키바나 환경 구축 기본 용어와 논리적, 물리적 구조 파악 주요 API 대략적 학습 인덱스 관리 API 문서 관리 API 검색 API 집계 API 엘라스틱서치 너.. 재밌다.....? 열심히 공부해보도록 할게..

TIL 2022-07-03 [내부링크]

# Today I Learned ----------------------------------------------- 엘라스틱서치 학습 매핑의 개념과 매핑 API 매핑 파라미터, 메타 필드, 필드 데이터 타입의 개념과 종류 Analyzer의 구조 및 동작 프로세스와 종류 Character filter, Tokenizer filter, Token filter의 종류

TIL 2022-07-05 [내부링크]

# Today I Learned ----------------------------------------------- 면접준비.. 엘라스틱서치 학습 Document API Synonym filter 팀 프로젝트 Laundry_Platform 주간 회의 진행 API 설계 보완

TIL 2022-07-06 [내부링크]

# Today I Learned ----------------------------------------------- 여기어때 서버 개발자 면접 엘라스틱서치 학습 Search API Query DSL 팀 프로젝트 Laundry_Platform GitHub Issue 정리.. 검색 관련 테이블 추가 설계 오늘 감사하게도 여기어때의 서버 개발자 면접을 보게 되었다. 3년차 이상의 경력공고여서 그런 것인지 면접을 미치도록 엄청나게 말아먹었다. 나같은 놈을 위해 시간을 내주신 면접관분들께 죄송할 정도였다. 덕분에 밥을 안먹었는데도 아직도 배가 든든하다. 다음부터는 괜히 까불지 말아야겠다. 아니다. 사실 끝나고 곰곰히 생각해보니까 그냥 내가 엄---청 부족했던 것 같다. 경험도 부족했고 그냥 기본적인 기술지식 자체가 부족했다. 퇴사한지 (공식적으로) 6일만에 이렇게 자신감이 죽어버릴 줄 몰랐다... 나름대로 많이 고민하고 내린 결정인데,, 면접 한 번 망쳤다고 아주 살짝 후회가 되기도 한다.

TIL 2022-07-07 [내부링크]

# Today I Learned ----------------------------------------------- 인증 Authentication 학습 Authentication의 개념 Authentication factors Authentication types Authentication protocols 팀 프로젝트를 진행하면서 사용자 인증을 위해 JWT를 사용하자는 얘기가 나왔는데, 기술을 선택하기 이전에 대체 가능한 다른 기술이 어떤 것이 있는지 찾아봐야겠다고 느꼈다. 뭐 하나를 찾아보다 보면 계속해서 파고 들어가 가장 근본적인 것부터 알려고 하는 성격이 있어서 결국 '인증이란 무엇인가?' 라는 질문까지 파고 들어갔다. 잘 정리된 책이 아니라 여러 블로그와 사이트를 돌아다니며 최대한 정확한 내용을 찾으려고 하다 보니(정확한게 뭔진 어떻게 알고?...) 시간이 정~~~~~말 오래 걸렸다. 그래도.. 인증이라는 개념에 대해서 이전보다는 더 이해를 하게된 것 같고, 이 분야도

[Security] 인증 Authentication - 개념, 종류, 방법론, 프로토콜 [내부링크]

Overview 온라인과 오프라인, 산업분야, 서비스의 종류를 불문하고 인증이라는 개념은 상당히 중요합니다. 컴퓨터 과학분야에서도 인증이라는 개념은 네트워크 상에서 통신하기 위해, 또는 어떤 서비스를 제공하기 위해서 자주 사용되는 중요한 개념입니다. 인증 절차가 정상적으로 수행되지 않으면 민감한 개인정보를 탈취당하거나 금전적인 피해를 입는 등의 상황이 발생할 수 있기 때문에 정확한 인증 절차는 필수적입니다. 이 포스팅에서는 네트워크상에서 보다 정확하고, 편리한 인증을 수행하기 위해서 알아야 하는 내용들에 대해 알아보도록 하겠습니다. -목차- 1) Overview 2) What is the Authentication? 3) Authentication factors 4) Authentication types 5) Authentication protocols 6) Conclusion What is the Authentication? 위 그림과 같이 인증은 클라이언트가 자신이 누구인지를 이

TIL 2022-06-14 [내부링크]

# Today I Learned ----------------------------------------------- 팀 프로젝트 Laundry_Platform 주간 회의 진행 샘플 데이터 취득방법 논의 Commit, Issue, PR의 단위에 대하여 논의 Branch Naming Rule 공유 TDD 기반의 예시 코드 작성 스프링 - Field Injection보다 Constructor Injection이 좋은 이유에 대한 이야기 팀 프로젝트 주간 회의를 했다. 시작한 지 꽤 지났는데 아직 갈 길이 멀다.. 속도가 좀처럼 나지 않는 것 같아 막막하긴 하지만, 그래도 다들 무언가 배우고 얻어가는 것이 있다고 하니.. 된거겠지?.. 아주 예전에 스프링을 공부할 때 필드 인젝션은 추천하지 않는다는 내용을 본 적이 있었다. 당시에는 딱히 와닿지 않고 사실 잘 이해도 되지 않았었다. Review 중에 이에 대한 내용이 있어 회의 중에 얘기를 했는데, 예전에 느꼈던 것과는 확연하게 차이가 있

TIL 2022-06-15 [내부링크]

# Today I Learned ----------------------------------------------- 독서 - GRIT 탁월성의 일상성 Mundanity of Excellence 오늘은 퇴근 후에 책을 읽었다. 요즘 한 달에 한 권씩 책을 사서 읽으려는 습관을 들이고 있다. 주변에 딱히 나에게 딱히 조언을 해주는 사람이 없어서, 책을 찾아보면서 다른 사람의 생각에 대해 알아가고 배우려고 하고 있다. 이번 달의 책은 GRIT이라는 책이다. 도대체 어느 순간부터인지는 모르겠는데, 무언가에 쫓기고 있다는 생각이 너무 강하게 든다. 처음에는 비전공자이기에 더 열심히 해야겠다는 단순한 생각이었던 것이, 시간이 지나면 지날수록 나에게 압박이 되고 나를 갉아먹는 무언가가 되어가고 있다. 남들보다 뒤쳐지고 있다는 불안감과 더 능력있는 개발자가 되고 싶다는 욕심이 나를 편히 쉴 수 없게 만드는 근본적인 원인인 것 같다. 항상 새로운 것을 공부하고 있고, 이것이 전혀 힘들다거나 괴롭지

TIL 2022-06-19 [내부링크]

# Today I Learned ----------------------------------------------- 개인프로젝트 DBMonitoring GUI 프로그램, 좌측 메뉴를 Navigation Drawer로 변경 (Show/Hide toggle가능하도록) Spring-MyBatis 테스트 코드 작성법 학습

TIL 2022-06-21 [내부링크]

# Today I Learned ----------------------------------------------- 스프링 부트 앱이 구동될 때 코드를 실행하는 방법 조사 CommandLineRunner ApplicationRunner ApplicationReadyEvent @EventListener @PostConstruct 팀 프로젝트 Laundry_Platform 샘플 데이터 수집 및 삽입 백엔드 스터디 테스트 코드 작성방법 안내

TIL 2022-06-22 [내부링크]

# Today I Learned ----------------------------------------------- Clean Architecture Presenter Layer 구현 예제 조사 DDD 기본 개념 학습 Java 파일입출력 관련 API 학습 문자기반 스트림 vs. 바이트기반 스트림 io vs. nio Multi-thread 환경에서 하나의 파일에 동시 입출력 시 발생 가능한 문제와 해결방법에 대한 고민

TIL 2022-06-23 [내부링크]

# Today I Learned ----------------------------------------------- Clean Architecture 학습 Usecase의 적절한 크기는 어느 정도인가? SRP를 지키는 범위... Usecase가 시스템의 동작을 나타낼 수 있도록.. (나 이런 시스템이다! 라고 말할 수 있는 Usecase) Usecase 계층과 Presenter, Controller 계층 사이의 Interface 구현방법 과제전형 문제 해결을 위한 아키텍쳐 설계 및 FlowChart 작성 최근 한 회사의 과제전형을 진행하게 되었다. 구현해야하는 비즈니스 로직의 난이도는 높지 않은 것 같다. 그보다는 제품 설계 역량을 더욱 중요하게 보고자 하는 느낌이 들었다. 그래서 나는 작년 10월쯤부터 꾸준히 관심있게 공부했던 클린 아키텍처를 이용해 과제를 진행하려고 한다. Spring을 사용해서 보다 쉬운 방법으로 구현할 수도 있을 것 같지만, 개인적으로 클린 아키텍처가 상당히

TIL 2022-06-24 [내부링크]

# Today I Learned ----------------------------------------------- Clean Architecture Usecase interactor와 Controller, Presenter 사이의 interface를 만드는 게 좋을까? 두 계층 간 인터페이스를 만들게 되면 인터페이스 스펙만을 준수하기만 하면 Usecase interactor와 상호작용할 수 있기에 확장에 용이하다. 인터페이스만 알면 상호작용이 가능하기 때문에 Usecase Interactor를 보호할 수 있다. (Usecase는 Core business logic이기 때문에 보호할 가치가 있다.) 계층간 경계가 확실히 생기기 때문에 테스트에 용이하다. (mock, stub을 이용하면 된다.) 인터페이스를 만들지 않으면 인터페이스 즉, Usecase output port, Usecase input port는 물론, 해당 인터페이스에서 사용되는 데이터 모델을 추가적으로 만들 필요가

TIL 2022-06-25 [내부링크]

# Today I Learned ----------------------------------------------- Multi-thread 환경에서 Singletone 객체를 다루는 방법 학습 Clean Architecture Presentation Module 설계 및 구현 - MVC 패턴을 이용한 Console Application

TIL 2022-06-26 [내부링크]

# Today I Learned ----------------------------------------------- 통합테스트 작성 단위 테스트와 통합 테스트 환경 분리하기 Multi-thread 환경의 테스트 코드 작성하는 방법 학습

TIL 2022-06-27 [내부링크]

# Today I Learned ----------------------------------------------- 파일시스템을 영속성 스토리지로 사용하면서, 동시성과 데이터 정합성을 동시에 유지하는 방법에 대한 고민 Inno DB의 Lock 종류 학습 Java Future 인터페이스 학습

[Data Structure] 트라이 (Trie) - 자동완성 기능 구현하기 [내부링크]

서론 어제 자바를 이용해서 Trie를 구현하는 포스팅을 작성했는데, 생각해보니 나의 최종목표는 '사전 애플리케이션의 자동완성 기능을 구현하는 것'이었다. 이번 포스팅에서는 지난 포스팅에서 작성된 코드를 기반으로 자동완성 기능을 구현해보도록 한다. 기반 코드 public class Trie { private final TrieNode root = new TrieNode(); /** * Trie에 문자열을 삽입한다. * * @param word 삽입할 문자열 */ public void insert(String word) { TrieNode curNode = root; for (char ch : word.toCharArray()) { curNode = curNode.getChildren().computeIfAbsent(ch, c -> new TrieNode()); } curNode.setLeaf(true); } /** * Trie내의 문자열을 탐색한다. * * @param word 탐색할

[DB] SQL Style Guide (by Simon Holywell) [내부링크]

서론 최근 진행하고 있는 팀 프로젝트가 DB 설계단계에 들어서면서, 팀원간에 공유될 수 있는 명확한 컨벤션 정립의 필요성을 느꼈다. 그래서 참고할만한 문서를 찾아보다가 Simon Holywell이 작성한 SQL Style Guide라는 글을 찾게 되어 해당 글을 번역 및 이해하여 팀원들에게 공유해보려고 한다. ※ 본 포스팅은 SQL Style Guide의 내용을 번역하며, 의역 및 오역이 포함될 수 있습니다. 22.05.30. 추가 해당 가이드에 대한 한국어 번역이 없어서 PR올렸더니 merge 받았다. 여기에서도 확인하실 수 있습니다. SQL Style Guide - Overview https://www.sqlstyle.guide/#overview 여러분은 이 가이드라인들을 이용하거나, fork 하거나, 여러분만의 가이드라인을 만들 수 있습니다. 여기서 핵심은 일관된 스타일을 선택하고 그것을 고수하는 것입니다. 가이드라인의 변경을 제안하거나 버그를 수정하려면 GitHub에서 iss

TIL 2022-06-05 [내부링크]

분명 매일 뭔가를 하고 있는데 도통 정리가 되지 않는 느낌이라, 오늘부터 매일 어떤 공부를 했는지 간단하게라도 적어보려고 한다. # Today I Learned ----------------------------------------------- Springboot에서의 MyBatis 설정방법 MyBatis 내부 동작 구조 Entity, DTO, VO의 역할과 사용에 대한 고찰 MyBatis를 사용할 때, Entity와 DTO,VO를 구분하는 것에 대한 고민 프로젝트 디렉터리 구조 설계방법 비교 (Layerd vs. by DDD) Git을 이용한 Project Managing Issue 기반의 Development Cycle 정립하기 Spring에서 Service와 ServiceImpl을 만드는 것에 대한 고민 행위 기반의 서비스 분리 Entity ↔ DTO간의 변환을 위한 라이브러리 조사 (ModelMapper vs. MapStruct) 팀 프로젝트 Laundry_Core - My

TIL 2022-06-06 [내부링크]

# Today I Learned ----------------------------------------------- MOM(Message Oriented Middleware)의 종류와 각 특징 조사 팀 프로젝트 Laundry_Core activeMQ 동작 테스트 Core 서버(Consumer)가 down되는 경우, message-queue 프로세스를 이용한 메시지 보존 및 재전송 테스트 개인 프로젝트 DB Monitoring Window Application Release 1.0.0 ver. 폰트 미적용 버그 수정 오늘은 공부를 많이 못해서 조금 아쉽다.. 낼은 더 열심히 하자.

TIL 2022-06-07 [내부링크]

# Today I Learned ----------------------------------------------- Gradle Launch4j plug-in 조사 개인 프로젝트 DB Monitoring Window Application Gradle Launch4j Plug-in 적용하여 빌드와 함께 .exe 실행 프로그램 생성 팀 프로젝트 팀원에게 git 사용법 알려주기 git을 이용한 개발 cycle (Issue, PR, Review, Merge 등) H2를 이용한 개발 및 테스트 환경 설정

TIL 2022-06-08 [내부링크]

# Today I Learned ----------------------------------------------- 팀 프로젝트 Laundry_Platform 주간회의 진행 프론트엔드, 백엔드 진행상황 공유 DB설계 보완점 논의 API설계 및 문서작성 관련 규칙 설정 Git 협업 방법 논의 Git Branch Protection rules 설정 개인 프로젝트 DB Monitoring Window Application Gradle Build Script 재작성 Runnable Jar 생성 시, 불필요하게 Bundling된 의존성 제거 distributions Task 실행 시, createExe Task 먼저 실행하여 .exe파일 배포본에 추가하기

TIL 2022-06-11 [내부링크]

# Today I Learned ----------------------------------------------- 개인 프로젝트 DBMonitoring Window Application OS에 따른 OS 디스크 사용량 모니터링 기능 개발 (Window, Linux) Logback encoding charset 설정 (UTF-8) Clean Architecture를 따르는 Multi-module 프로젝트의 필요성에 대한 고찰 높은 테스트 및 빌드 비용 개발 생산성의 저하 Module 별 버전관리 필요성 GitHub Action 사용법 조사 오늘은 작년 10월쯤부터 Clean Architecture를 공부하기 시작하면서 개인 프로젝트로 가지고 놀던 DBMonitoring 프로젝트의 구조에 대해 다시 생각을 하게 되었다. 어느 정도 기능 개발이 완료되고 첫 번째 Release 버전을 배포하게 되면서, 단일 모듈 프로젝트였던 것을 Common, Repository, Core, Utils

TIL 2022-06-12 [내부링크]

# Today I Learned ----------------------------------------------- Git Hooks 사용법 조사 Git Actions 사용법 조사 팀 프로젝트 Laundry_Platform Project Managing 일관적인 Branch naming을 유지, 강제할 수 있도록 Git Hooks와 Git Action 이용하기 Pull Request Template 정의 및 적용 Label 추가 및 공유 Git Convention을 지키고자 하는 목적에 대한 Discussion 작성 팀 프로젝트를 진행하면서 자연스럽게 Git을 이용해 협업을 하게 되었고, Project Managing을 해 볼 기회가 생겼다. 회사에서도 Git을 이용해서 버전관리를 하고는 있었지만 아쉽게도.... 누군가와 협업을 하는 일은 드물었는데, 새로운 프로젝트의 구조 및 컨벤션 등을 설계하다보니 정말 배울 수 있는 내용이 많이 있는 것 같아서 기쁘다. 지난 1년간 회사생활을

TIL 2022-06-13 [내부링크]

# Today I Learned ----------------------------------------------- 스프링 TDD 관련 내용 학습 통합테스트 방법 Controller, Service, Repository 컴포넌트별 테스트 방법 오늘은 스프링에서의 TDD 방법에 대해 공부했다. 회사에서 스프링을 다룰 때에는 딱히 테스트코드를 작성하지 않았었고, 주로 프레임워크를 사용하지 않는 자바 프로젝트를 이용해 업무를 진행했어서 이제서야 스프링에서의 TDD를 다루게 된다. 예전에는 느끼지 못했는데 프레임워크를 사용한다는 건.. 꽤나 어려운 일인 것 같다.

2021.10.31. [내부링크]

이번 주말은 할로윈이 껴있었다. 당연히 난 안놀았다 하하하-하-하하-하하 금요일엔 월급을 받았다. 세금이 떼이는 걸 보니 상당히 마음이 아팠지만 그래도 기분이 좋았다. 이번주에 계속 헬스장을 다녀와서 몸 전체가 백신 주사를 맞았을 때처럼 아파서 힘들었는데 퇴근하고 동기랑 고기에 술한잔 하니 몸이 아주 말짱해졌다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 강남역에 있는 아트몬스터에 가서 맥주를 먹었는데, 맥주가 아주 맛있었다. 인테리어도 이쁘고 맥주도 다양하고, 셀프로 따라서 먹을 수 있는 시스템이라서 재미도 있었다. 토요일 아침에는 치과를 다녀왔다. 무려 초등학교 때 때웠던 이가, 고등학교 때 때웠던게 빠지고, 대학교 때 부러지고, 군대에서 휴가나와서 뽑았었는데 직장인이 되어서야 임플란트를 한다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아 웃을 일은 아닌 것 같은데 써놓고 보니까 이게 뭐람.. 하, 치과랑 좀 친해져야 될 것 같다. 대학교 때는 알바한다고, 동아리한다고, 공부한다고 안갔고 취준할때는

[Web] Web Server는 정적인 리소스만을, WAS는 동적인 리소스만을 처리한다? [내부링크]

본 포스팅에서는 "Web Server는 정적인 리소스만을, WAS는 동적인 리소스만을 처리한다?"라는 질문에 대해 답합니다. Overview 톰캣이 무엇인가에 대해 조사를 하면서, 기존에 알고 있던 Web Server, Web Application Server의 개념과 인터넷 검색을 통해 나온 결과들이 일치하지 않아 상당한 혼란이 왔습니다. 그래서 이번 기회에 각각의 개념과 그 관계를 확실히 정리하고자 합니다. 또, 이러한 오해가 생겨난 원인에 대해서도 알아보고자 합니다. 개발자 면접 단골 질문으로 나오기도 하는 "Web Server와 WAS의 차이점은 무엇인가?"에 대한 답변에도 참고할 수 있을 것이라고 생각이 됩니다. 오해의 원인 저 뿐만 아니라, "Web Server는 정적인 컨텐츠만을 처리하고 Web Application Server는 동적인 컨텐츠만을 처리한다."라고 알고 있는 분들이 많이 있었습니다. 결론부터 말하자면, 위 문장은 완벽하게 맞는 표현은 아니었습니다. 이러한

[Logback] CVE-2021-42550(LOBACK-1591) 대응방법 [내부링크]

log4Shell 사태로 로깅 프레임워크를 logback으로 변경했었는데, logback에서도 새로운 취약점이 발견되었다. 나중에 시간이 되면 더 자세히 알아봐야겠다. Logback 공식 사이트 대응방법 https://logback.qos.ch/news.html 16th of December, 2021, Release of version 1.2.9 We note that the vulnerability mentioned in CVE-2021-42550 requires write access to logback's configuration file as a prerequisite. Please understand that log4Shell and CVE-2021-42550 are of different severity levels. In response to CVE-2021-42550 (aka LOGBACK-1591) we have decided to make the following

[Data Structure] 트라이 (Trie) - 자바로 구현하기 [내부링크]

서론 이라 쓰고 그냥 주절주절하는 내용 1년전 쯤 트라이라는 자료구조에 대해 간단히 공부하고 블로그 포스팅을 한 적이 있다. 최근 어느 회사의 전화인터뷰에서 "사전 애플리케이션의 자동완성 기능을 구현하기 위해서 어떤 자료구조를 이용할 것이냐" 라는 질문을 받았는데, 반사적으로 트라이 자료구조가 떠올랐다. 하지만 이를 직접 구현해본 적은 없어서 자신있게 대답을 하지 못해 매우매우매우 아쉬웠다. 또, 최근에 코딩테스트 연습 차 프로그래머스 웹 프론트엔드 데브매칭에 참여했는데 검색어 자동완성 기능을 구현하는 문제가 나왔다. 프론트엔드이다 보니 주어지는 API를 이용해 반환된 단어리스트를 보여주는 등의 View 컨트롤만 하는 문제이긴 했다. 어쨌든, 이런저런 이유에서 이번 기회에 트라이 자료구조를 구현해보고자 한다. Node of Trie Data Structure 위 그림에서 볼 수 있듯이, 트라이 자료구조는 다음의 특징을 가진다. ① 각 노드는 완성된 문자열인지 아닌지 여부를 저장한다.

[Clean Architecture] The Clean Architecture 번역 및 이해 [내부링크]

본 포스팅에서는 Robert C. Martin의 Clean Architecture에 대해 다룹니다. 일명 밥 아저씨라고 불리는 엉클 밥의 Clean Code 블로그 포스팅 중 "The Clean Architecture" 를 번역하고 이해하는 것이 주 내용이 될 것입니다. ※ 의역이 포함될 수 있습니다. 지난 수십년동안, 우리는 시스템 아키텍처에 관한 아래와 같은 다양한 아이디어들을 보아왔습니다. - Hexagonal Architecture (a.k.a. Ports and Adapters) - Onion Architecture - Screaming Architecture - DCI - BCE 이러한 아키텍처들 각각의 세부적인 내용은 다를지라도, 이들은 모두 비슷한 측면이 있습니다. 이들은 모두 '관심사의 분리'라는 동일한 목적을 가지고 있으며, 모두 소프트웨어를 몇 개의 레이어로 분리함으로써 그 목적을 달성하고 있습니다. 각각은 최소한 한개의 비즈니스 규칙을 다루는 레이어를 가지고 있

[Clean Architecture] 1장. 설계와 아키텍처란? [내부링크]

본 포스팅에서는 Robert C. Martin의 저서 <Clean Architecture> 중 1장의 내용에 대해 다룹니다. ※ 전반적으로 책 내용을 바탕으로하며 스스로의 언어로 풀어내려고 생각하며 작성합니다. 설계와 아키텍처의 차이점? <클린 아키텍처>에서는 설계, 그리고 아키텍처의 개념과 그 중요성에 대해 독자들에게 확실히 인지시킨 후에 다음 내용을 다루려고 합니다. 저자는 독자에게 설계 Design와 아키텍처 Architecture 의 차이점이 무엇인지에 대해 질문합니다. 곧바로 저자가 내놓는 답은, 설계와 아키텍처 사이에는 아무런 차이점이 없다는 것입니다. '아키텍처'는 보다 고수준의 무언가를 가리키며, '설계'는 보다 저수준의 무언가를 의미할 때가 많지만, 이러한 구분은 의미가 없다고 말합니다. 이 주장에 대해, 위와 같은 건축 설계도를 예로 듭니다. 이 설계도는 집의 형태, 방의 배치 등, 이를테면 고수준의 아키텍처를 포함하고 있습니다. 그와 동시에 전등의 위치, 콘센트의

[Clean Architecture] 2장. 두 가지 가치에 대한 이야기 [내부링크]

본 포스팅에서는 Robert C. Martin의 저서 <Clean Architecture> 중 2장의 내용에 대해 다룹니다. ※ 전반적으로 책 내용을 바탕으로하며 스스로의 언어로 풀어내려고 생각하며 작성합니다. 소프트웨어 개발에서의 두 가지 가치 소프트웨어 개발자는 소프트웨어를 개발함에 있어 두 가지 가치에 대해 고민해야 합니다. 하나는 행위 Behavior이며, 다른 하나는 구조 Structure입니다. '행위'라는 가치는, 간단히 표현해서 기능 구현입니다. 소프트웨어를 고객의 요구사항 문서에 따라, 각 요구사항을 충족시키고 동작하도록 만드는 것을 행위라고 표현합니다. 아마 대부분의 개발자가 매일 이러한 '행위'의 가치를 위해 열심히 키보드를 두들기고 있을 것입니다. 놀랍게도 저자는 '행위'의 가치에만 집중하는 개발자들의 태도를 과감하게 '틀렸다' 라고 표현합니다. '구조'라는 가치는, 소프트웨어를 유연하게 만들기 위해 핵심적인 가치입니다. 저자는 'Software'라는 단어를 통