1. 로그인을 유지시킬 방법 우리는 클라이언트와 서버가 통신할 때 HTTP 프로토콜을 사용한다는 것은 알 것이다. 혹시 모른다면 HTTP & HTTPS 포스팅을 보고 오는 것을 추천한다. HTTP 프로토콜은 크게 두 가지 특징이 있다. 1-1. 비 연결성 서버와 요청을 하고 요청한 데이터를 서버가 받은 다음 그에 대응하는 응답을 보낸다. 이게 한번 통신이 일어나는 과정인데, 서버가 응답을 하고 나면 클라이언트와 연결이 끊어진다. 이것을 비연결성 이라고 한다. 1-2. 무 상태성 아까 비 연결성으로 인해 한번 통신을 하고 나면 클라이언트와 서버가 연결을 끊는다고 했다. 그럼 이전에 통신을 했을 때 주고 받았던 상태 정보가 남아있지 않아 새롭게 갱신을 시켜주어야 한다. 이건 생각보다 심각한 문제다. 만약 의..
1. 패러다임의 불일치란 ? 객체와 관계형 데이터베이스가 지향하는 목적이 서로 다름으로 인해 둘의 기능과 표현 방법이 다른 것을 말한다. 기능과 표현 방법이 다르다는게 무슨 말일까 ? 2. 객체모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다. 애플리케이션은 발전하면서 그 내부의 복잡성도 점점 커진다. 이 복잡성을 제어할 수 있는 장치가 바로 객체지향 프로그래밍이다. 도메인 모델을 정의할 때도 객체지향적으로 개발하면 객체지향 언어가 가진 장점들을 활용할 수 있다. 문제는 객체지향적으로 정의한 도메인 모델을 저장할 때 발생한다. 단순히 객체를 저장하는 일이라면 문제가 발생하지 않겠지만, 실무에선 단순히 객체만을 저장하는 일은 거의 없을 것이다. 예를 들어, 사용자가 회원가입을 하면 회원이라..
Spring Security란 ? 스프링에서 제공하는 보안 관련 프레임워크다. 사용자의 요청에 대한 인증, 사용자가 권한이 있는지 확인하는 인가, 응답 등등 보안에 관련해서 많은 부분을 제공해주고 있기 때문에 개발자가 하나하나 보안에 대응하는 코드를 짜지 않아도 되는 장점이 있다. 대부분 우리는 Spring Security를 로그인 유지/페이지 권한 등에 사용한다. Spring Security를 좀 더 이해하기 위한 용어 의미들 위에서 Spring Security의 의미를 설명하면서 인증과 인가에 대해서 말했다. 그럼 인증과 인가의 정확한 의미는 뭘까 ? 인증, 인가 뿐만 아니라 나중에 나오는 중요한 용어들도 함께 정리해보았다. 인증(Authentication) : 사용자가 본인인지 확인하는 절차 인가(..
1. 문제점 처음에 페이징은 Page를 반환하여 사용하였고, 검색처리는 List로 구현하였다. 이러고 보니까 페이징은 되는데 검색처리가 안되고, 검색처리가 되니까 페이징이 안되는 현상이 발생하였다. 페이징 O, 검색처리 X일때 터지는 Exception ClassCastException 검색처리 O, 페이징 X일때 터지는 Exception TemplateInputException 결국엔 검색로직을 반환할때 Page Object로 반환하기만 하면 되는 문제였는데, 반환하는 법을 몰라 2시간동안 삽질하였다. 2. 해결 믿고보는 스택오버플로우 글들.. 간단하다. List로 불러온 것을 new PageImpl()로 감싸주기만 하면 된다.
전통적인 자바에서 인터페이스와 관련 메서드는 한 몸처럼 구성된다. 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 예를 들어보자. CRUD의 추상메서드를 가지고 있는 인터페이스가 있다. 그리고 위 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그렇게 하지 않으면 오류가 뜰 것이다. 평소에는 이 규칙을 지키는 데 아무 문제가 없지만 라이브러리 설계자 입장에서 인터페이스에 새로운 메서드를 추가하는 등 인터페이스를 바꾸고 싶을 때는 문제가 발생한다. 위 예제를 다시 들어 나는 CRUD 인터페이스를 설계한 설계자이다. 어느 날 나는 CRUD 인터페이스에 제목으로 검..
1. 프로젝트 생성 먼저 프로젝트를 생성해보자. 해당 사이트 으로 들어가서 아래와 같이 작성해주자. 그리고 intellij로 프로젝트를 실행하고 build.gradle파일을 찾아 dependencies에 아래코드를 복사해 붙여준다. implementation 'org.springframework.boot:spring-boot-starter-aop' 그럼 준비는 다 끝났다. 2. AOP 적용할 예제 작성 controller 패키지를 만들어주고 RestApiController 클래스를 생성하고 아래 코드를 작성하자. 아래코드는 간단한 get, post 매핑을 하여 로그가 찍히는지 확인하는 로직이다. User에 빨간줄이 뜨는 것을 알 수 있다. 그럼 User 객체를 만들어보자. dto라는 클래스를 만들고, U..
1. AOP란 ? Aspect Oriented Programming의 줄임말로, 관점지향 프로그램 이라고 한다. 스프링 어플리케이션은 특별한 경우를 제외하고 MVC 웹 어플리케이션에서 Web Layer, Business Layer, Data Layer 로 정의한다. 스프링 DI가 의존성에 대한 주입이라면, AOP는 로직에 대한 주입이라 볼 수 있다. 1-1. Web Layer REST API를 제공하고 Client 중심의 로직을 적용. 보통 요청에 대한 응답을 해주거나 HTTP 상태를 변경한다. Controller라고 생각하면 될 것 같다. 1-2. Business Layer 내부 정책에 따른 logic을 개발. 서비스 로직을 짜는 것이 Business Layer라고 볼 수 있다. Service라고 생각..
옛날에 에플리케이션을 개발하는 법 애플리케이션을 개발하면 관계형 데이터베이스를 데이터 저장소로 사용하면서 오랫동안 SQL을 다룬다. 몇 년 전에는 개발자들이 JDBC API를 직접 사용해서 SQL문을 작성해가며 개발을 해왔다. 그러다 보니 애플리케이션의 비즈니스 로직보다 SQL문과 JDBC API를 작성하는 데 더 많은 시간을 보내게 된 것이다. 시간이 지나고 아이바티스(마이바티스), Jdbc Template 등을 SQL 매퍼라 불리는데, SQL 매퍼를 통해 JDBC API 사용 코드를 줄일 수 있었다. 하지만 등록, 조회, 수정, 삭제(CRUD)용 SQL은 여전히 반복해서 작성해야 했다. 반복, 반복, 반복! 자바로 개발하는 애플리케이션은 관계형 데이터베이스를 데이터 저장소로 사용한다. 데이터베이스에 ..
Thymeleaf 레이아웃 기능 xmlns:th="http://www.thymeleaf.org" 자주 사용하는 문법 th:text th:href th:insert th:each th:action th:value 이 정도가 있다. 그럼 하나하나씩 어떤 상황에 사용하는지 알아보자. th:text 텍스트 내용이다. 기본문법은 아래와 같다. th:text="${ data }" 서버에 담겨있는 데이터를 텍스트로 출력할 때 사용한다. 예를 들어 사용자가 게시글을 썼다고 가정해보자. 그럼 게시글의 제목을 화면에 출력해보자. th:href url을 적으면 그 url경로로 이동한다. 기본문법은 아래와 같다. 버튼이나 a태그로 특정 페이지로 이동하고 싶을 때 사용한다. 예를 들어 제목 조회에서 한 개의 게시판만 보고 싶..
1. 개념질문에 대한 정확한 답변 TCP, UDP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜이다. 2. 네트워크 계층이 뭐지 ? 전송 계층은 또 뭐지 ? 프로토콜은 뭐야 ? 위 답변은 정확하다. 하지만 만약 이때까지 네트워크를 몰랐던 사람한테 위 답변처럼 말하면 못 알아 들을 것이다. 그럼 네트워크 계층이 뭔지, 전송계층은 뭔지, 프로토콜이 뭔지 하나하나씩 파헤쳐보자. 2-1. 네트워크 계층 우리는 지금 인스타DM이나 카카오톡 등, 즉 메신저를 통해 10,751km 떨어진 미국에서 지내고 있는 친구와 이야기하듯 소통하고 있다. 이런 일을 가능하게 하는 것이 바로 네트워크 통신인데, 수많은 사람들이 동시에 쉴 틈 없이 계속해서 메세지를 주고 받기 위해선 아주아주아주 체계적이고 표준화 시켜야 한다...
- Total
- Today
- Yesterday