스프링 부트 프로젝트 배포 오늘은 스프링 부트 프로젝트를 배포해 봤다. 먼저 간단하게 그림으로 구조를 그려보면 아래의 그림과 같다. DB 서버로는 MySQL를 사용하여 Replication 설정을 해주었고, 총 3대의 리눅스 가상 머신을 사용하여 스프링 부트 프로젝트를 배포하였다. 웹 서버로는 nginx 서버로 구성하였고 부하 분산을 위해 스프링 부트 서버를 로드 밸런싱 처리를 해줬다. 하나씩 어떻게 구성하는지 살펴보자. MySQL DB 구성 먼저 DB 구성부터 살펴보면 이전에 MySQL로 Replication 설정을 정리한 적이 있어서 참고하여 설정했다. Mysql - Replication Replication Replication은 복제라는 뜻으로 하나의 메인 DB 서버의 데이터를 그대로 복제한 하나..
엔티티(Entity) JPA에서 엔티티는 DB 테이블에 대응하는 하나의 클래스이다. 따라서 엔티티는 JPA를 사용하는 데 가장 중요한 것으로 엔티티와 테이블을 정확히 매핑해야 한다. JPA는 다양한 매핑 어노테이션을 지원하는 데 크게 4가지가 있다. - 객체와 테이블 매핑: @Entity, @Table - 기본 키 매핑: @Id - 필드와 컬럼 매핑: @Column - 연관관계 매핑: @ManyToOne, @JoinColumn 등 먼저 @Entity로 엔티티를 정의하는 것과 @Id로 기본 키를 매핑하는 것을 알아보고 그 후 연관관계 매핑과 컬럼 매핑을 알아보자. 객체와 테이블 매핑(@Entity, @Table) @Entity JPA를 사용해서 테이블과 매핑할 클래스는 꼭 @Entity를 필수로 붙여야 한..
한화시스템 BEYOND SW 캠프 2기 - 10주 차 회고 부트캠프를 시작한지 10주가 지났다. 이번 한주 동안에는 포트원 API를 적용하여 결제 기능을 구현해봤다. 결제 기능까지 학습하니 이제는 완전한 서비스를 만들 수 있겠다는 생각이 들었다. 소셜 로그인 소셜 로그인 사람들이 자주 사용하는 웹이나 모바일 앱을 보면 거의 대부분은 소셜 로그인이 가능하다. 사용자 입장에서 보면 소셜 로그인은 굉장히 간편하고 여러 사이트를 관리하기 쉬워진다 hotechstory.tistory.com 이번 주에는 정리한 글이 소셜 로그인 밖에 없었다. 결제 기능을 처음 구현해 봐서 조금 헤매었고, 나머지 이틀간 강사님이 주신 실습을 구현하느라 정리할 시간이 부족했었다. 돌아오는 주에는 JPA를 공부하게 되는데 완벽하게 정리..
소셜 로그인 사람들이 자주 사용하는 웹이나 모바일 앱을 보면 거의 대부분은 소셜 로그인이 가능하다. 사용자 입장에서 보면 소셜 로그인은 굉장히 간편하고 여러 사이트를 관리하기 쉬워진다. 개발자 입장에서도 간편한 것은 마찬가지다. 따로 어떠한 사용자의 정보를 받을 필요 없이 서비스를 이용하는 사람이 소셜 로그인을 하는지 확인하고 적절한 요청과 응답을 보내주면 되기 때문에 보다 간편하게 회원의 인증과 인가 작업을 할 수 있다. 처음에 소셜 로그인을 어떻게 구현해야 되는지 잘 몰랐는데 강의를 듣고 찾아보니 각 소셜 기업마다 API를 공개하여 편리하게 사용할 수 있도록 만들어 놓았다는 것을 알게 되었다. 이제 내가 만든 서비스에서 소셜 로그인을 구현하려면 원하는 소셜 기업에 들어가 API 문서를 찾아보고 설명서..
한화시스템 BEYOND SW 캠프 2기 - 9주 차 이번 한 주간은 스프링에 있는 여러 가지 기술들을 학습했다. 스프링 Config server와 Swagger, Vault 등 여러 가지를 학습했던 한 주였다. 저번 주에 학습했던 것도 아직 정리를 다 하지 못해서 이번에 배운 것 또한 다 정리를 하지 못했지만 그래도 다행인 것은 정리하는 데 크게 어려움은 없을 것 같았다. 스프링 - JWT 토큰(Token) 토큰은 클라이언트가 서버에 접속하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰이라는 것을 발급해 준다. 토큰을 발급받은 클라이언트는 다시 서버에게 요청을 보낼 hotechstory.tistory.com JPA - ORM과 JPA ORM(Object Relational Mapping) ORM..
ORM(Object Relational Mapping) ORM은 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해 주는 하나의 프레임워크로 객체와 관계형 데이터베이스의 데이터를 매핑해 주는 기술이다. 그렇다면 ORM을 사용하는 이유가 뭘까? 패러다임 불일치 문제 객체지향 언어가 가진 장점을 활용하여 도메인 모델을 정의할 수 있지만 DB에 저장할 때 문제가 발생한다. 반면에 관계형 데이터베이스에서는 데이터 중심으로 구조화되어 있기 때문에 객체지향이라는 개념이 없어서 객체라는 것을 저장할 수가 없다. 객체가 단순하다면 get()을 통해서 모든 속성 값을 꺼내 DB에 저장할 수 있지만, 부모 객체를 상속받았거나, 다른 객체를 참조하고 있다면 객체의 상태를 저장하기는 쉽지 않다. 연관관계 문제 객체는 참조..
토큰(Token) 토큰은 클라이언트가 서버에 접속하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰이라는 것을 발급해 준다. 토큰을 발급받은 클라이언트는 다시 서버에게 요청을 보낼 때 요청 헤더에 토큰을 넣어서 보내게 되고 해당 서버는 클라이언트로 받은 토큰을 서버에서 제공한 토큰과 일치하는지 확인하여 인증하게 된다. 이러한 인증 방식을 토큰 기반 인증 방식이라고 한다. 그렇다면 왜 세션 기반 인증 방식 보다 토큰 기반 인증 방식을 사용할까? 기존 세션 기반 인증 방식의 문제점 JWT로 인증하는 방식을 공부하기 전에 먼저 기존의 세션 방식에서의 문제점을 살펴보자. 기존의 세션 기반 인증 방식의 문제점으로는 두 가지 경우가 있다. 1. 서버 이중화에 따른 문제점 사용자의 요청이 많아질수록 서버의 부..
한화시스템 BEYOND SW 캠프 2기 - 8주 차 회고 부트캠프에 들어온지 벌써 8주 차, 약 2달이 다 되어간다. 지금 와서 생각해 보면 지난 2달간 정말 많은 성장이 있었던 것 같다. 집에서 혼자 공부했을 때는 스프링이 뭔지 잘 몰랐고 그냥 '자바를 쓰면 해야 되니까'라는 생각을 많이 했었다. 근데 좋은 강사님을 만나고 매일 공부를 하다보니 아무 생각 없이 사용했던 스프링이 뭔지 점차 깨닫게 되었고 그로 인해서 많은 성장을 이뤄낼 수 있었다. 스프링 - 스프링 프레임워크의 기초 스프링 프레임워크(Spring Framework) 웹 개발에 필요한 다양한 기능을 제공해 주는 자바 기반의 프레임워크이다. 여기서 핵심은 바로 자바 언어를 기반으로 만들어졌다는 것인데 자바 언어는 객체 hotechstory...
스프링 시큐리티(Spring Security) pring Security는 강력하고 사용자 정의가 가능한 인증 및 액세스 제어 프레임워크입니다. 이는 Spring 기반 애플리케이션 보안을 위한 사실상의 표준입니다. Spring Security는 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크입니다. 모든 Spring 프로젝트와 마찬가지로 Spring Security의 진정한 힘은 사용자 정의 요구 사항을 충족하기 위해 얼마나 쉽게 확장할 수 있는지에 있습니다. -Spring Seurity 공식 홈페이지- 스프링 시큐리티는 스프링 공식 홈페이지의 설명처럼 인증(Authentication) 및 인가(Authorization) 프레임워크이다. 이커머스 서비스를 예시로 생각해 ..
JVM(Java Virtual Machine)우리가 사용하는 컴퓨터는 0과 1로 이루어진 숫자만 이해할 수 있다. 하지만 개발할 때 보면 문자, 0과 1이 아닌 숫자들도 많이 사용하게 되는데 이러한 내용들은 컴퓨터가 바로 이해할 수 없다.따라서 작성한 코드를 컴퓨터가 이해할 수 있는 0과 1의 숫자로 변환해주는 작업이 필요하게 되는데 이러한 과정을 컴파일이나 인터프리트라고 한다. 컴파일과 인터프리트의 차이를 잠깐 살펴보면 먼저 컴파일은 프로그램을 실행하기 전에 해당 코드들을 컴퓨터가 읽을 수 있는 0과 1의 숫자로 변환해주는 작업이다.컴파일 과정을 거치면 미리 변환해주는 과정을 거쳐야 되지만 이를 통해서 사전에 문제가 될 수 있는 부분들이 걸러질 수 있고, 변환된 코드를 컴퓨터가 한 번에 읽을 수 있기 ..
레이어드 아키텍처(Layered Architecture) 스프링 프레임워크를 사용하여 웹 서비스를 만든다고 생각해 보면 당연하게 스프링 MVC 패턴을 떠오르게 될 것이다. 지금 그림으로 볼 때는 Controller가 HTTP 요청에 대해서 어떤 작업을 수행하고 결과를 반환하게 되는데 만약 DB에도 접근해야 되고 지금 보다 많은 작업이 추가된다면 어떻게 될까? 스프링 프레임워크는 개발자가 좋은 객체 지향 설계를 할 수 있도록 도와주는데 좋은 객체 지향 설계를 하려면 역할과 구현을 분리해야 한다. 하지만 컨트롤러에 많은 역할을 부여하고 관련 기능들을 구현하게 된다면 좋은 객체 지향 설계라고 할 수 없고 그러면 결국 객체 지향의 장점인 유연한 변경을 할 수 없게 된다. 이러한 문제를 사전에 방지하고 컨트롤러의..
스프링 프레임워크(Spring Framework) 웹 개발에 필요한 다양한 기능을 제공해 주는 자바 기반의 프레임워크이다. 여기서 핵심은 바로 자바 언어를 기반으로 만들어졌다는 것인데 자바 언어는 객체지향 언어이므로 스프링 프레임워크는 결국 객체지향 언어가 가진 강력한 특징을 살려주는 프레임워크인 것이다. 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 그렇다면 프레임워크와 라이브러리의 차이가 뭘까? 프레임워크와 라이브러리의 차이 - 프레임워크(Framework) 프레임워크는 하나의 소프트웨어로 프로그램을 개발하기 위해 필요한 것을 생성 및 관리해 주고 전체적인 구조나 뼈대 혹은 틀을 제공함으로써 프로그램 개발을 보다 간편하게 할 수 있도록 도와준다. - 라이브러리(Library)..
한화시스템 BEYOND SW 캠프 2기 - 7주 차 회고 지난 한 주간 알고리즘과 스프링을 공부했다. 알고리즘을 3일간 하면서 그럭저럭 괜찮았지만, 스프링을 이틀간 공부하는데 거의 일주일 공부한 것처럼 시간도 빠르게 지나가고 공부하는 양도 많이 늘어났다. 프로그래머스 - 가장 큰 수 카테고리: 정렬 레벨: 2 언어: Java 문제 입출력 예시 풀이 public String solution(int[] numbers) { String[] str = new String[numbers.length]; StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length; i++) { str[i] = String.val hotechstory.tistory...
카테고리: 정렬 레벨: 2 언어: Java 문제 처음에 문제를 읽었을 때 뭔가 쉬워 보이면서도 이해가 안 가는 문제였다. 그래도 친절하게 위키백과에서 H-Index에 관한 개념을 확인할 수 있어서 읽어보니 바로 이해할 수 있었다. h-index - Wikipedia From Wikipedia, the free encyclopedia Metric that attempts to measure the productivity and citation impact of a person's publications The h-index is an author-level metric that measures both the productivity and citation impact of the publications, ..
카테고리: 그리디 레벨: 1 언어: Java 문제 처음에 문제를 이해하는데 어려움은 없었다. 만약에 2번 학생이 체육복이 없다면 3번이나 1번 학생이 체육복을 빌려주면 되고, 체육복이 없는 사람을 기준으로 -1이나 +1을 해줘서 풀면 된다고 생각했다. 하지만 막상 풀어보니 코드를 실행했을 때는 테스트 케이스가 맞았지만, 제출을 해보니 중간에 실패가 몇 개 발생하였다. 어떤 것이 문제인지 살펴보니 체육복을 도난당한 학생들과 여벌의 체육복이 있는 학생들을 정렬시켜 줘야지 번호가 섞여도 문제가 되지 않았고, 여벌의 체육복을 가져온 학생도 도난당할 수 있다는 제한 사항도 있어서 처리가 필요했었다. 입출력 예시 풀이 public int solution(int n, int[] lost, int[] reserve) ..