목록프로젝트 (11)
윤개발

Gathering-bot 서비스를 개발하면서 성능에서 가장 크게 고민했던 부분에 대한 포스팅입니다. 1. 초기 설계 개발 전 Gathering-bot 서비스 데이터베이스 설계는 다음과 같습니다. 다른 테이블(사람, 배치등)과 일부 컬럼(생성한 사람, 응답시간등)은 주제와 연관이 없어 표기하지 않았습니다 시트는 1개 이상의 취합 항목을 가지고 있습니다. 취합 항목은 시트_id 를 FK로 가진다. 시트는 1개 이상의 응답을 가지고 있습니다. 응답은 시트_id 를 FK로 가진다. 응답은 1개 이상의 응답 항목을 가지고 있으며 시트의 취합항목에 대한 응답입니다. 응답 항목은 응답_id를 FK로 가지며 취합항목_id를 FK로 가진다. 2. 성능 이슈 고민 초기 데이터베이스 설계와 함께 JPA의 지연로딩을 사용하여..
🖐️ 프로젝트 개요 사내에서는 많은 취합 업무가 발생하며 주로 엑셀을 통해 작성하고 메일로 전달되어 통합된다. 메일로 이루어지기 때문에 취합담당자는 수많은 엑셀을 받아서 통합하는 과정이 필요하다. 우리 회사는 폐쇄망이므로 외부 인터넷이 불가능하다 즉 구글 설문조사, 공유문서 사용이 불가능하다 엑셀로 처리하는 취합업무를 빠르게 처리해보고자 프로젝트를 시작하게되었다. 🔎 조사 사내망에서 구글 설문조사, 구글 공유문서를 사용할 수 없음. 미응답자에게 다시 회신해달라는 리마인드 메일을 보내야하는 불편함, 제출 안한 사람의 이메일을 일일히 입력해줘야하는 귀찮음 응답하는 인원은 일을 미뤘다가 응답을 잊을 수도 있음. 수정 요청하는 경우에는 취합을 다시 반복해야함 🔥 프로젝트 내용 취합 담당자 로그인을 하고 시트를 ..

Spring Security에 대해 학습하고 로그인, 사용자 관리 웹어플리케이션 개발한다. 프로젝트 개요 게시판을 만드는 프로젝트는 CRUD 기능을 구현하기 위한 기본이 되는 프로젝트라 할 수 있다. 이런 기본적인 게시판에 스프링 시큐리티를 적용해 살을 덧붙이고 싶다는 생각이 들었다. 게시판을 만드는 "구현"에 더해 게시판별로 권한을 처리한다. 또한 동시 접속 서비스 이용자가 1만명이라는 가정하에 "성능"의 측면에서 깊게 고민하며 개발할 예정이다. 구현 목표 구현목표는 아래와 같이 3가지로 정의하였다. 1. Spring Security를 이용하여 여러 방식으로 로그인을 구현한다. (Security 학습) Session JWT Token OAuth 2.0 (추후 예정) 2. 권한 그룹을 만들고 사용자를 관..

에러처리 구현 이번 포스팅에서는 이전에 완료하지 못했던 에러처리에 대해 설명합니다. 에러처리에는 여러 방법이 있으나 이번 게시판에서는 네이버에서 사용하는 에러처리방법을 사용해보겠습니다. 네이버의 에러처리 { "errorMessage": "Authentication failed (인증에 실패하였습니다.)", "errorCode": "024" } 네이버는 에러코드와 함께 에러 메시지를 리턴하는 형식을 가지고있습니다. 에러처리 구현 이에 맞게 exception 폴더에 ErrorResponse 객체를 생성하겠습니다. 생성 전에 JSON으로 에러를 리턴하기위해 JSON-simple 이라는 의존성을 가져오도록 하겠습니다. pom.xml에 아래 의존성을 추가한 후 메이븐을 새로고침해줍니다. com.googlecode..

이번 포스팅에서는 User의 Controller, Service, Repository 를 생성하고 회원가입 API를 만들어보겠습니다. 먼저 JpaRepository를 상속받는 UserRepository를 생성합니다. JPARepository를 상속받으면 기본적인 CRUD는 자동생성되며 메소드 이름으로 쿼리를 만들 수 있습니다. package com.board.My.Board.repository; import com.board.My.Board.domain.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { } 이처럼 껍데기만 만들어도 기본..

이제 본격적으로 백엔드 API의 Domain을 생성하겠습니다. 먼저 클래스들의 분리를 위해 아래와 같이 패키지 폴더들을 만들어주시면 됩니다. config 폴더는 프로젝트의 설정파일들이 위치할 장소입니다. 나머지 폴더는 이전 포스트에서 설명한 클래스들이 위치할 장소입니다. DB 스키마 생성을 위해 domain 폴더 밑에 Board와 User 클래스를 생성하겠습니다. 간단한 게시판이므로 테이블의 관계는 위 사진과 같습니다. 아래는 User 클래스의 내용입니다. import lombok.Getter; import javax.persistence.*; @Entity @Getter public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @C..

이번 포스트에서는 백엔드 API의 구조를 알아보도록 하겠습니다. 간단한 게시판 만들기이지만 실제 사용하는 백엔드 API 구조를 설계하였습니다. 먼저 객체 정보를 알아보겠습니다. 각각은 모두 클래스 들이며 아래와 같이 사용할 예정입니다. 번호 이름 설명 1 Json 프론트와 백엔드 api는 JSON 형식으로 통신합니다. 2 Spring Security JWT 인증을 적용하여 인증 & 권한을 확인합니다. 3 DTO(Data Transfer Object) JSON으로 입력된 데이터를 JAVA 객체로 변경하고 유효성 체크를 합니다. 4 Controller 요청이 들어온 API 에서 어떤 동작을 할지 결정하고 리턴합니다. 5 Service 컨트롤러에서 받은 요청을 처리합니다. (비지니스 로직) 6 Domain J..

이번 포스팅에서는 프로젝트시 사용할 Intelij 설정을 적용해보겠습니다. 1. 플러그인 설치 Intelij 메뉴에서 File > Setting > Plugins로 들어가면 아래와 같은 화면이 나오게됩니다. 상단에 Marketplace에서 플러그인을 검색하고 설치할 수 있습니다. Vue.js, Prettier, Lombok 3개를 검색하고 설치해줍니다. 이상으로 3개의 플러그인을 설치하였습니다. 2. webpack.config 파일 생성 & 적용 다음으로는 webpack.config.js 파일을 만들고 적용시켜보도록 하겠습니다. 프로젝트 root > front 위치에 webpack.config.js 파일을 생성합니다. 생성 후 아래 코드를 복사 & 붙여넣기 합니다. const path = require(..

이번 포스팅에는 Front Vue 를 생성해보겠습니다. 프론트 생성을 위해 터미널을 열어 프로젝트의 루트 폴더(pom.xml이 위치한 폴더)로 이동해주세요. 다음 vue 프로젝트 생성을 위해 아래 명령어를 입력해주세요. vue create front 그러면 다음과 같은 창이 나오게되는데 Manually select feature(사용할 기능을 직접 선택)를 선택해주세요. 그리고 다음과 같은 항목을 선택해주세요. Babel : ES6를 ES5로 변환해줍니다. (낮은 버전의 브라우저에서 Javascript를 지원할 수 있도록 도와줍니다.) Router : vue 에서 지원하는 라우팅입니다. url 분기를 위해 선택해줍니다.. Vuex : token 등 전역 정보를 저장하기위해 선택합니다. Linter / F..

이번 포스팅에는 Backend 프로젝트를 생성해보겠습니다. Intellij Ultimate에서 기본적으로 제공하는 Spring Initializer를 사용해도 되지만 Community 버전을 고려하여 spring io에서 생성해보겠습니다. 아래 링크를 눌러주세요 https://start.spring.io/ 링크를 누르면 아래와 같은 화면이 나오게 됩니다. Project 항목은 Maven과 Gradle을 선택할 수가 있습니다. (Maven과 Gradle은 프로젝트의 의존성을 관리해줍니다.) 저는 Maven으로 선택하고 언어는 Java, Boot 버전은 2.2.9를 사용하겠습니다. 또한 그룹명등은 임의로 해주시면 되며 java 8을 사용하겠습니다. 이제 오른쪽에 보시면 Dependencies가 있습니다. 프..