전체 글 13

[토이 프로젝트] 올인원 프로젝트 관리도구 workaround: 기획

💡 들어가며 이미 프로젝트 관리를 위한 다양한 도구들이 존재한다. 메신저로는 Slack, 문서 관리 도구로는 Notion, 업무 관리 도구로는 Jira 등이 있다. 각 서비스는 각자의 특장점을 가지고 있으며, 각각의 장점을 모아 하나의 어플리케이션으로 만든다면 어떨까 하는 막연한 생각으로 이 프로젝트를 시작하게 되었다. 🌳 JANDI ?사실 이러한 기능을 제공하는 서비스들은 많이 있다. 그중에서도 한국 서비스로는 JANDI (http://www.jandi.com)가 있는데, 내가 구현하고자 하는 서비스와 가장 유사하다. JANDI는 팀 관리, 업무 관리, 메신저, 화상 회의, 문서 관리 등 다양한 기능을 하나의 서비스에서 모두 제공하고 있다. 다만, JANDI 서비스는 좀 더 보편화된 기능을 제공하는데 ..

컴퓨터과학 2024.05.27

[Spring] 스프링 MSA 개발하기 - 2: 개별 서비스 모듈구조 설정

🤔 들어가며 MSA의 개별 서비스 개발에 앞서 서비스마다 모듈 구조를 어떻게 구성하는것이 좋을지 고민하며 작성한 글이다. 🏢 멀티 모듈 구조 설계 멀티 모듈 구조란 독립적인 프로젝트들을 묶어 모듈로 사용하는 구조를 말한다. 어떤 형태의 모듈 구조를 구성할 까 고민할 때 다음과 같은 것들을 고려하였다. - 각 서비스는 개별의 DB를 가지며 독립된 서비스 형태를 가진다. - 각 서비스는 프론트, 백오피스 api로 구분된다. - 프론트 및 백오피스 서비스에서는 같은 영속성 엔티티들을 사용한다. - 각 서비스는 batch 기능을 가질 수 있다. 위의 사항들을 고려하여 설계한 모듈 구조는 다음과 같다. -: 모듈 사용자 서비스 - front - api (스프링 어플리케이션) - service (비즈니스 로직) -..

07.15 한국선불카드 구름 코딩테스트 후기

한국선불카드 코딩테스트는 구름 서비스를 통해 진행되었습니다. 총 4개의 문제가 출제되었고, 2일로 기한이 정해져 내내 풀 수 있어서 어렵지 않게 모두 풀 수 있었던 것 같습니다. 물론 채점결과가 공개되지 않아서 전부 맞았는지는 모르겠어요 1~3번 문제는 단순 구현문제로 정규표현식 사용, 자료형을 올바르게 적용하는 문제 등 간단한 문제였습니다. 프로그래머스 난이도 1~2 수준이였던 것 같아요. 4번문제가 조금 까다로웠는데(코린이 기준) 크래킹 툴 중 딕셔너리 어택을 구현하는 문제였습니다. 빈칸이 뚫려있는 문자열과 포함될 수 있는 후보키들이 주어지고, 후보키들을 적당히 조합하여 올바른 패스워드를 구하는 문제였습니다. 생각보다 고려해야할 경우의 수가 많아서 다 따지며 구현하다보니 꽤나 코드가 길어지고 시간복잡..

일상/취업준비 2022.07.15

[spring boot] Async 비동기 메소드 사용하기

💡 들어가며 Spring boot 프레임워크를 이용한 rest api 서버에 FCM을 이용한 푸시알림 서비스, 이메일 인증 서비스를 구현하게 되었는데 앞서말한 2가지 기능처럼 외부 api 통신 등의 네트워크를 이용하면 꽤 긴 딜레이가 발생한다는걸 알게 되었습니다. 이와같은 딜레이를 어떻게 제거할까 고민해보았는데요, 곰곰히 생각해보니 푸시알림이나 이메일 전송등을 호출하는 로직은 해당 api의 핵심로직이 아니고 단순 알림을 위한 기능이였으므로 일단 api호출에 대한 응답을 먼저 넘기고, 스프링이 알아서 이메일을 보내든 푸시알림을 보내든 다른기능을 하도록 할 수 없을까? 하는 생각이 들어 방법을 알아보던중 비동기로 메소드를 실행할 수 있다는것을 알게 되었고 구현해보았습니다. 🤔 근데 비동기가 뭐지? 비동기..

Firebase Cloud Message(FCM) 스프링 부트 프로젝트에 적용하기

FCM이란?☁️ Firebase 클라우드 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션입니다. - firebase 공식 홈페이지 참고문서 이 글에선 FCM에 대한 원리 설명, 설정보다 스프링 프로젝트에 적용하는 과정에 대해 설명하고자 한다. 초기설정 방법과 원리설명 등은 공식문서에 잘 정리되어 있으니 링크를 참고하길 바란다. 스프링 부트 프로젝트에 적용하기 요약 스프링 프로젝트에서의 FCM 사용 방법은 다음과 같다 1. 유저 테이블에 FCM 토큰 저장하는 컬럼 추가 2. 토큰 저장하는 REST API 생성 3. 특정 유저의 저장된 토큰으로 알림메시지 보내는 FCM 서비스 구현 + 4. 알림을 보내기 원하는 동작의 컨트롤러에서 비동기로 FCM 서비스 호출 + 5. ..

[Spring]Jenkins로 ec2 서버에 원격 배포하기 (publish over ssh 없이)

Jenkins - github 연동이 완료되었다고 가정합니다! 참고: Jenkins github와 연동하기 : https://goddaehee.tistory.com/258 (갓대희님 블로그) 기존 원격으로 ec2 서버에 jenkins로 빌드한 jar 파일을 배포하는 방법인 publish over ssh플러그인이 젠킨스 보안정책상 배포 중단되었습니다. (22.01.12) https://www.jenkins.io/security/advisory/2022-01-12/ Jenkins Security Advisory 2022-01-12 Jenkins Security Advisory 2022-01-12 This advisory announces vulnerabilities in the following Jenkin..

[Spring] 예외 발생은 어디서 해야할까?

스프링에서 예외발생은 어느 계층에서 이루어져야할까? Controller? Service? Repository? ... 결론부터 말하자면 모든 계층에서 발생할 수 있다. 단, 예외의 유형을 정의하는것은 바람직하다. 가령 권한(401)에 대한 검증은 컨트롤러, 유효성(404)에 대한 검증은 서비스 처럼 말이다. 객체지향적 관점으로 봤을 때 해당 클래스가 객체로써 올바르게 작동할 수있는가? 를 따져보아 개발자가 직접 선택하면 된다. Question.만약 권한에 대한 검증을 서비스에서 한다면? Answer. 권한에 대한 검증을 서비스에서 진행한다면 해당 서비스를 다른 컨트롤러 또는 서비스에서 이용함에 있어 권한문제를 통과하지 못할 수 있다는 불확실성이 생긴다. 반드시 권한이 있는 유저가 그 서비스 메소드를 호출..

[Spring] DTO의 객체변환은 어느 계층에서 하는것이 적절할까?

스프링 프로젝트를 진행하다보니 DTO 객체를 사용하는 계층이 정확히 정의되지 않았다 는 문제점을 발견하고 어느 계층까지 DTO를 전달하는것이 맞을까? (어느 계층에 DTO를 엔티티로 변환하는 로직이 존재해야하는가) -> 이 로직을 컨트롤러, 서비스, 리포지토리 어느계층에 두어야 하는가? 를 고민하게 되었다. PROBLEM. DTO 와 엔티티(VO)간의 변환 로직을 어느 계층에 두는것이 적절할까? 별 생각없이 컨트롤러에서 DTO를 엔티티로 변환하여 서비스로 넘기는 방식으로 구현하고보니 지나치게 많은 로직이 컨트롤러에 포함되어있음을 알게되었다. 사용자 인터페이스의 역할을 하는 컨트롤러에 서비스에 있어야할 로직들이 포함되는 문제가 발생한다. but DTO를 서비스단으로 넘긴다면? 우선 서비스는 리포지토리를 D..

AWS DB 인스턴스 MySQL 시간설정

1. 현재 db 시스템의 시간을 확인한다. select now(); 현재 시간과는 다른 시간이 나온다 (서울기준) 2. db의 timezone이 어디로 지정되어있는지 확인한다. show variables like 'time_zone'; UTC로 설정되어있다. (그리니치 천문대가 있는 영국의 시간) 3. 시간을 바꾸려고 aws 사이트를 뒤져보았다 내 mysql 엔진은 8.0이므로 db 파라미터 그룹에서 시간을 변경하기로 한다. 4. 시간 변경에대한 aws의 의견은 아래와 같다 어플리케이션을 운용할 때에 UTC 시간을 사용하는것이 이후 수정의 필요가 없어지므로 제일 좋다고 한다. 대신 어플리케이션 계층에서 시간을 변환하여 사용하는것을 추천한다. 하지만 토이프로젝트를 진행하는 현재 편의성을 위해 본 게시글에서..

컴퓨터과학/SQL 2021.08.03

[Spring] 페이지 리로드(새로고침)시 발생하는 데이터 중복전송 현상 방지

문제확인 웹페이지를 이용하다보면 서버에 데이터가 중복으로 전송되는 현상이 발생한다. 예로 로그인 실패 직후 새로고침을 하면 이전에 진행된 데이터 전송 프로세스가 반복돼서 실행되며 이로인해 불필요한 연산이 진행되고, 뷰로 로그인 실패에 관한 정보를 다시 전송하게된다. (로그인 실패 → 잘못된 아이디 입력 alert표시 → 새로고침 → 다시 잘못된 아이디 입력 alert ... ) 원리 이러한 현상을 어떻게 방지할지 고민하다가 새로고침시 호출되는 컨트롤러(핸들러)는 최종으로 리다이렉트된 컨트롤러임을 알게되었고, 이 작동방식을 이용해 문제를 해결하였다. 실행 이를 위해선 최초 데이터 수신 컨트롤러와 리다이렉트 이후 뷰로 데이터를 전송하는 컨트롤러를 구분하였다. 1. 데이터 수신 컨트롤러 @PostMapping..

반응형