분류 전체보기

    [Spring Boot & AWS] Chpt 6 - AWS 서버 환경을 만들어보자 - AWS EC2

    이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 이제 AWS(Amazon Web Service)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행해 보겠다. 외부에서 지금까지 만든 서비스에 접근하기 위해서는 24시간 내내 작동하는 서버가 필수적이다. 집의 PC를 24시간 구동, 호스팅 서비스, 클라우드 서비스 이렇게 3가지 선택지가 존재하는데 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다. 클라우드 서비스는 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서버를 제공하는 것을 말한다. 예를 들어 AWS의 EC2는 서버 장비를 대여하는 것에 그치지 않고 로그 관리, 모니터링, 하드웨어 교체, 네..

    [Spring Boot & AWS] Chpt 5 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

    이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 스프링 시큐리티는 강력한 인증과 인가 기능을 가진 프레임워크로, 사실상 스프링 기반 애플리케이션 보안을 위한 표준으로 볼 수 있다. 인터셉터나 필터를 기반으로 한 보안 기능을 구현하는 것보단 스프링 시큐리티를 통해 구현하는 것을 적극적으로 권장하고 있다. 이번 장에서는 스프링 시큐리티와 OAuth 2.0을 구현한 구글 로그인을 연동하여 로그인 기능을 만들어 보겠다. 1. 스프링 시큐리티와 스프링 시큐리티 OAuth2 클라이언트 많은 서비스에서 로그인 기능을 새로운 id/password를 만드는 방식보다는 구글, 페이스북, 네이버 로그인 등의 소셜 로그인 기능을 사용한다. 이는 배보다 배꼽이 커지는 경우를 방지하..

    [Spring] Select에 @Transaction을 사용하는 이유

    '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 공부하던 중 궁금한 점이 생겨 이를 정리하고자 한다. @Transactional(readOnly = true) public List findAllDesc(){ return postsRepository.findAllDesc().stream()// postsRepository의 결과로 넘어온 Posts의 stream을 .map(PostsListReponseDto::new) // map을 통해 PostsListResponseDto로 변환하고 .collect(Collectors.toList()); // 이를 List로 반환하는 메소드 } 위의 코드를 보면, DB에서 posts들을 Select하는 메서드이다. 하지만 @Transactional(readOnly ..

    [Spring] Spring 웹 계층 구조

    스프링에 대해 공부할 때 우리가 항상 배우는 중요한 개념이 바로 스프링의 웹 계층 구조이다. Service, Repository, Controller, Entity, DTO 등이 스프링 웹 계층에 포함되는데 항상 배우면 까먹고를 반복하다 보니 명확하게 알고 가는 것이 필요할 것 같아서 정리해보고자 한다. 스프링 웹 계층을 그림으로 나타내면 다음과 같다. 1. Web Layer 웹 애플리케이션의 최상위에 위치한다. 외부의 요청을 받고 이에 응답하는 영역이며, 다른 레이어에서 발생한 예외도 처리한다. 인증을 관리하고 권한을 받지 못한 사용자에 대한 인증 거부도 진행한다. @Controller와 JSP/Freemarker 등의 뷰 템플릿 영역이다. 필터, 인터셉터, 컨트롤러 어드바이스 등을 포함한다. 데이터 ..

    [Spring Boot & AWS] Chpt 4 - 머스테치로 화면 구성하기

    이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 1. 서버 템플릿 엔진과 머스테치 소개 1) 서버 템플릿 엔진과 클라이언트 템플릿 엔진 먼저 서버 템플릿 엔진이란 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 말한다. 서버 템플릿 엔진을 이용한 화면 생성은 서버에서 JAVA 코드로 문자열을 만든 뒤 이 문자열을 HTML로 변환하여 브라우저로 전달한다. 반면에 클라이언트 템플릿 엔진은 서버 템플릿과 마찬가지로 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하지만 브라우저 위에서 작동한다. 즉, 브라우저 위에서 작동하기 때문에 서버 템플릿 엔진에서 제어할 수가 없다. 그렇기 때문에 서버에서 Json, Xml 형식의 데이터만..

    [Spring Boot & AWS] Chpt 3 - 스프링 부트에서 JPA로 데이터베이스 다뤄보자

    이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 웹 서비스를 개발하고 운영하다 보면 항상 다루어야 할 것이 바로 데이터베이스(DB)이다. 과거에는 직접 SQL문을 다루면서 DB를 관리하다 보니 어려움이 많았지만, 요즘은 JPA라는 기술을 사용해서 간단하게 관리할 수 있다. JPA라는 자바 표준 ORM 기술을 사용해서 객체지향 프로그래밍을 사용하여 관계형 데이터베이스를 관리할 수 있다. 편리성 덕분에 1. JPA 소개 현대의 웹 애플리케이션에서 Oracle, MySQL 등의 관계형 데이터베이스(RDB)는 필수적인 요소이다. 그렇다 보니 객체를 관계형 데이터베이스에서 관리하는 것은 무엇보다 중요하다. 그리고 관계형 데이터베이스가 중심이 되감에 따라 코드 또한 애..

    (Python) 백준 1966번 - 프린터 큐

    문제 링크 : https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 풀이 큐와 이차 배열을 사용하여 문제 풀이를 진행했다. 중요도와 문서 번호를 동시에 큐에 담아서 진행하는 것이 풀이의 핵심이라고 볼 수 있겠다. 이차 배열이 아니라 딕셔너리를 사용하여서 풀이하는 것도 가능할거 같다. import sys from collections import deque for _ in range(int(sys.stdin.readline())): n, m = map(i..

    [Spring] 의존성 주입이란?

    의존성 주입(Dependency Injection)은 스프링의 핵심 개념 중 하나로 흔히 DI로 줄여 쓰기도 한다. 의존관계 주입이라고 하기도 하고 다양한 번역이 존재하지만 이 글에선 의존성 주입으로 통일하도록 하겠다. 1. 의존성 (Dependency) 의존성 주입에 대해 알기 전에 의존성이 무엇인지 알아봐야 할 필요가 있다. 일단 '의존한다'라는 것은 무엇일까? 흔히 우리가 '철수가 영희에게 의존한다'라는 표현을 하면 철수가 영희에 의해 좌지우지된다고 생각할 수 있다. 즉, 영희의 행동과 상태의 변화가 일어나면 그 영향이 철수에게도 미친다는 것이다. 철수와 영희를 프로그램의 일부로써 생각한다면 영희의 기능 변경이나 추가가 철수에도 영향을 끼친다는 것이다. 의존대상 B가 변하면, 그것이 A에 영향을 미..

    [Spring Boot & AWS] Chpt 2 - 스프링 부트에서 테스트 코드를 작성하자

    이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 1. 테스트 코드 소개 1) TDD와 단위 테스트(Unit Test) ● TDD 테스트가 주도하는 개발을 뜻한다. 테스트 코드를 먼저 작성하는 것부터 시작한다. 레드 그린 사이클을 거치며 개발한다. 레드 그린 사이클은 다음과 같다. 항상 실패하는 테스트를 먼저 작성 (Red) 테스트가 통과하는 프로덕션 코드 작성 (Green) 테스트를 통과하면 프로덕션 코드를 리팩토링 (Refactor) ● 단위 테스트 TDD의 첫 번째 단계인 기능 단위의 테스트 코드 작성을 뜻한다. TDD처럼 테스트 코드를 꼭 먼저 작성할 필요도 없으며, 리팩토링 또한 포함되지 않는다. 순수하게 테스트 코드를 작성하는 것만을 의미한다. 이번..

    (Python) 백준 1929번 - 소수 구하기

    문제 링크 : https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 풀이 저번에 풀이했던 1978번과 같은 방식인 에라토스테네스의 체로 풀이를 했다. 다만 2부터 (자기 자신 - 1)을 모두 나눠보면 시간 초과가 발생하여 어떻게 해야 하는지 고민하던 중, 2부터 √자기자신 까지만 나눠도 된다는 사실을 알게 되어 그렇게 풀이해 보니 제한 시간 내에 통과할 수 있었다. import sys import math n, m = map(int, sys.stdin.readline().split..