서연 매니저님의 목소리에서 집착을 배웠고민철 튜터님의 git & git hub 강의에서 열정을 배웠다성원 매니저님과 담당 튜터님에겐 감동을 배웠다진짜진짜 죄송해요 git & git hub 복습 꼭할거에요 살려주세요.드디어 기다리던 오늘은 공식개강 첫날...하늘은 푸르지
html 안에서 새창으로 다른 html파일 열기html -> 'script' 안에 위와 같이 코드를 입력html -> 작동하려하는 버튼 또는 카드에 'onclick'으로 지정python -> 'script'에서 지정한 주소 대신 다른 html을 지정onclick="sh
git, github튜터님 이해 잘되는 좋은 예시그림 감사합니다!terminal 명령어개강 첫날에 ssh 연동때문에 막혀있던 git&github 문제를 드디어 해결했다.다시 강의와 추가 연동방법을 보며 따라해보았지만 하면할수록 막히는부분이 많아 멘탈이 나갈뻔했는데튜터님
오늘은 내일 미니프로젝트 발표 전 마지막 마무리를 하였다.이런저런 일들이 많았지만 결국 생각에 두고있던 기능들을 구현할 수 있었고, 문제없이 작동되니 만족감이 컸다.발표 ppt에 장난을 조금 해봤는데 팀원들의 반응이 너무 좋아서 사용해야될까 고민이 들었다.진짜로 써볼까
백엔드는 눈에 안띄일수록 좋은거다. -강창민 튜터님-오늘은 드디어 우리팀의 일주일이 전부라고 할 수 있는 프로젝트 발표날.시간은 중요하다 생각해서 최대한 시간안에 간결하게 설명하고 넘긴 부분들이 많았는데, 다른 팀들의 결과물들을 보니 같은 일주일동안 만든 결과물들이
기초변수 : '그것', 바꿔줄 수 있음 (int, String)상수 : '사과', 바꿀 수 없음 (final int, final String)camelCase : finalNumber와 같이 첫 음절 시작은 소문자, 두번째 음절 시작은 띄지 않고 대문자로 시작, 낙타의
\-. 파이썬을 설치한다 : 번역팩을 설치 했다 \-. 읽기 쉽게 만든 언어이기 때문에 문법이 쉬워 초보자가 배우기 좋은 언어변수선언'변수이름 = 값' 으로 표현'a = b' 와 'b = a'의 의미는 다르다!변수(a=2)와 문자열(a='2')는 다른 의미, 혼동 주의
알고리즘이란 쉽게말해 문제가 있다면 그것을 해결하기 위한 여러 동작들의 모임이다.코드의 구현력을 올리기 위해, 코딩 시간을 단축하기 위해 필요하다.알고리즘을 쉽게 하기 위해선 코드를 직접 짜보기 전에 한글로 어떻게 진행할 것인지 먼저 써보고, 그러고 나서 코드에 대한
배운거 알고리즘-2-최빈값 찾기 문자열에서 어떤 알파벳이 가장 많이 포함되었는지 반환하기 배열에 있는 알파벳의 빈도수를 index로 저장 : [3, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 2, 2, 1, 1, 1, 0, 1, 2, 1, 0, 0, 0,
Array & Linked List Array(배열) -. 배열은 크기가 정해진 데이터의 공간, 정해지면 바꿀 수 없다. 배열은 각 원소에 직시 접근할 수 있다. -. 원소의 순서는 0부터 시작하고 이것을 인덱스 라고 부른다. -. 이 때, 즉시 접근 가능하다는 말은
나무의 뿌리처럼 보이는 계층형 비선형 자료 구조큐, 스택과 같은 선형 구조는 자료를 저장하고 꺼내는데 유용하다면비선형 구조는 표현에 유용하다.폴더의 구조들이나 가족관계도는 비선형 구조의 대표적인 형태이다.Node: 트리에서 데이터를 저장하는 기본 요소 Root Node
멤버 변수/한수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 역할접근 제어자의 종류private : 같은 클래스 내에서만 접근이 가능, 외부 클래스에서 사용할 수 없다.default(nothing) : 같은 패키지 내에서만 접근이 가능하다. 아무것도 선언하지 않은
컬렉션 구체적인 자료구조의 종류인 리스트(list), 스택(stack), 큐(queue), 셋(set), 맵(map) 들을 통틀어 컬렉션 이라 한다. 컬렉션 프레임워크 다수의 데이터를 다루기 위한 자료구조를 표현하고 사용하는 클래스의 집합 컬렉션 인터페이스 정의
class의 이름을 HelloJava 생성했을 때 화면class 안에 'psvm' -> 'Enter'로 Main 함수를 생성한다.Main함수 안에 들어가보면 왼쪽 위에 경로를 확인할 수 있다.First(project) -> hello(package) -> HelloJa
6. 클래스와 객체 2 this 예약어 1. 생성된 인스턴스 스스로를 가리키는 예약어 클래스 코드에서 사용하는 this는 생성된 인스턴스 자신을 가리키는 역할도 한다. 2. 생성자에서 다른 생성자를 호출 클래스에 생성자가 여러 개 있을 때 다른 생성자에 코드가 이
프로그램을 유연하고 변경이 쉽게 만들어야한다.각 객체들은 역할과 책임이 주어진다.각 객체들은 서로 협력을 통해 움직인다.이러한 역할과 책임을 가지는 객체들이 서로 협력을 통해 시스템을 구성한다.객체의 품질이 협력의 품질을 결정한다.의사소통에 대한 비용을 크게 줄여준다.
오늘은 아무래도 내일있을 프로젝트 시작을 위해 지금까지 배웠던 자바의 객체지향에서 이해가 되지 않았던 개념들을 구글링과 유튜브와 책 내용들을 쭉 훑어보았다.처음 강의로 배웠을 때는 느낌만 이해하고 넘어간 정도였고, 책 내용들로 두번째 복습했을 때는 코드들을 해석하는 정
오늘은 미니프로젝트 2차 - 1일차를 시작했다.최근 배웠던 객체지향 강의 내용들을 위주로 메모장 기능을 구현해보았다.강의들을 들으면서 개념들이 제대로 이해가 되지 않았었다보니 객체지향에서도 많이 힘들었었는데프로젝트를 시작하려하니 방향성도 잡지 못하고 숨부터 막혀왔다.하
미니프로젝트 1일차가 끝나고 두번째인 2일차가 시작되었다.2일차 프로젝트는 두가지 선택지가 주어졌는데하나는 은행 관리 프로그램 설계와 나머지 하나는 호텔 예약 프로그램이었는데 우리 조는 호텔 예약 프로그램을 구현하기로 정하였다.노션 에서 3Tier로 나누어 클래스명,
오늘은 프로젝트 2일차의 두번째 날이었다.어제 작성하던 호텔 고객의 DB를 관리하는 User Repository 코드를 마무리하였다.코드를 작성하기 전에 먼저 한글로 자세하게 풀어서 적어보고, 그것을 나누어 코드로 구현하는 방법들을 고민하는 방식을 해보았다.솔직히 내가
오늘은 프로젝트 발표 전날 팀원들과 함께 지금까지 작성했었던 코드들을 모아 병합하고 리팩토링을 하였다.생각보다 의외로 코드를 병합하는 과정에서 오류는 별로 없었지만, 까먹고 기능 구현을 까먹은 것들을 추가하다보니 코드가 점점 복잡해지는걸 직접 경험할 수 있었다.다같이
for문으로 예약 가능한 방 리스트들 중에 선택한 방을 찾는 코드였는데나는 처음엔 당연히 위에 코드와 같이 if문에 else return "예약실패"를 해야 if문 조건에 일치하지 않으면 else로 "예약실패"가 될거라 생각했다.하지만 코드를 병합하고 실행을 해보니 방
코드가 실행되는 과정개발자 -> 자바 컴파일러 -> 바이트 코드 -> -> JVM -> OS -> Hardware바이트코드 : JVM이 알아들을 수 있는 명령어 집합JVM의 목적은 바이트코드를 기계어로 번역(인터프리터가)하여 CPU에게 일을 시키는 것JDK(Java D
정적 변수클래스 내부에 선언인스턴스가 생성될 때마다 새로 생성되는 변수가 아닌, 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 가장 먼저 메모리 공간이 할당된다.그 값은 모든 인스턴스가 공유한다.클래스에 기반한 변수이기 때문에 '클래스 변수' 라고도 한다.http
유튜브 영상 설명얄코 : https://www.youtube.com/watch?v=iks_Xb9DtTM테코톡 : https://www.youtube.com/watch?v=1grtWKqTn50잘 작동하고 깔끔한 코드를 얻기 위해 테스트 코드를 작성한다.
스프링 입문 1-0 웹 동작방식 이해하기
배운 개념 및 기술을 활용하여 메모장 사이트를 구현한다.필요한 기능들접속하자마자 메모 전체 목록 조회하기메모 생성하기메모 변경하기메모 삭제하기jQuery란 미리 작성된 자주 사용되는 자바스크립트 함수 모음집을 제공하는 기능
인프런 스프링 무료강의 참고 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/unit/4958
오늘은 스프링 입문주차 과제인 개인 블로그 만들기를 시작했다.강의를 보며 메모장 만들기를 해봐도 잘 이해가 되지않아서 인프런에 있는 무료강의도 돌려보았다.두가지 강의를 들어보니 전보다는 이해가 된거같긴 했지만그래도 막상 코드를 쓰려다보니 손이 떨어지지가 않았다.일단 코
엔티티를 영구 저장하는 환경어플리케이션(자바 코드)이 데이터베이스에서 꺼내욘 데이터 객체를 보관하는 역할엔티티 매니저를 통해 엔티티를 조회하거나 저장할 때 엔티티를 보관하고 관리엔티티 매니저마다 개별적으로 부여되는 논리적인 공간같은 개념영속성 컨텍스트와 관계가 없는 새
디버깅(debugging) : 프로그램 내 버그를 찾아 죽이다.디버거(debugger) : 버그를 죽일 때 도움을 주는 도구(IntelliJ가 제공)디버깅 과정breakpoint 설정Step Over로 breakpoint 실행Resume Program으로 다음 brea
오늘로 마침내 내일배움캠프 Spring 숙련주차 강의를 모두 들었다.7개의 강의가 각각 1시간이 안되는 길이의 영상이지만 중간중간 이해가 되지않는 부분이나 오류를 수정하다보니 시간이 너무 많이 걸렸다.물론 대부분 이해하기는 어려웠고 그저 코드를 따라 쳐보는 경험을 해본
힌트 1) spring jpa localtime between 라고 구글링해보세요.힌트2) 지금은 LocalDateTime.now(), 하루 전은 LocalDateTime.now().minusDays(1) 입니다.기존의 생성시간 기준으로 최신 게시물을 내림차순으로 정렬
팀프로젝트를 진행하면서 드는 생각 1. 뭔가 잘못된거같은데... 꾸준한 반복으로 달인이 되려면 실력을 개선하려는 동기가 있어야 한다. 구체적인 피드백을 적절한 시기에(짧고 빈번한) 받는 것이 좋다. 내가 제자리인 이유... 내 감정상태(지루한지, 불안한지)를
Spring 숙련 과제 진행하던 도중 회원가입에서 아이디와 비밀번호의 제한사항을 구현하던 도중 @Pattern어노테이션에 대해 알게되었다.이와 같이 따로 표현해줘도 되지만이렇게 하나로 표현이 가능하다.
오늘은 스프링 강의를 입문부터 복습하였다.이상하게 처음 입문 강의를 봤었을 때는 이해가 안되었던 것들이지금은 강의도 직접 따라해보고 과제도 진행한 뒤라서 그런지 이해가 엄청 잘되었다.숙련 강의는... 아직 제대로 이해하기 버겁지만 이번에 입문강의가 이해된걸 보니 가능성
오늘은 입문 과제를 도전해보....다가 말았다.숙련강의까지 따라해보고, 입문 과제의 라이브코딩도 보고나니 그래도 자신감이 붙었었는데 아무것도 안보고 해보려고하니 금방 막히고말았다...일단 어떤 코드가 필요하고, 어떤 기능을 써야하는지 알고, 완성된 코드는 해석 가능할거
오늘 스프링 입문 과제를 작성하던 도중 오류는 없는데 게시글 작성하기가 작동되지 않았다.코드를 따라서 치는것만 했는데도 안되자 멘붕이 와버렸고...어디를 놓친건지 고민하다가 일단 진정하고 관련이 있는 모든 코드들을 차근차근 살펴봤더니히익 ㄴㅇㄱ파라미터로 들어온 upda
입문 과제를 라이브코딩을 보고 따라해본 뒤 이번엔 내가 직접 코딩에 도전해보았다.완전히 아무것도 안보면서 하기에는 어려워서 막히는 부분에서는 내가 만든 코드를 참고해가며 작성해나갔는데그러던 와중에도 어노테이션이 어디에 어떤게 있어야 어떤 기능이 작동하는지 에서 많이 막
오늘 프로그래머스 알고리즘 문제를 풀어보던 도중 랜덤한 알파벳으로 이루어진 문자열에서 모음(a,e,i,o,u)를 지운 문자열을 반환하라는 문제를 풀어보았다. 처음 아이디어는 문자열을 배열로 바꾼 뒤 for문으로 제거하는 방법을 생각해보았지만, 보다 간편한 방법이 있을거
오늘 스프링 심화 강의를 들으며 강의 프로젝트를 따라하던 도중 완성을 하고 실행을 해보았는데 웹페이지에서 회원가입을 하고 로그인을 하고나니원래는 이렇게 나와야할 메인화면에갑자기 login.html의 코드들이 나타났다.다른 것도 아니고 갑자기 html 형식이 메인 페이지
오늘 알고리즘 문제를 풀던 중 문제로 문자열에서 대문자는 소문자, 소문자는 대문자로 변환하여 반환하라는 문제가 나왔다.구글링을 해보고 toUpperCase와 toLowerCase가 있다는 것을 알고난뒤 문자열을 char\[] 형태로 변환하고 for문안에 if문으로 대문
드디어 오늘 스프링 심화과제를 전부 다 들었다...그나마 다행인건 심화과제에 대한 이론 설명은 숙련강의보다 괜찮은거같았고, 강의 중간에 오류때문에 고생을 좀 했지만 그래도 해결방법을 하루만에 찾을 수 있었다.내일부터 팀프로젝트가 시작되는데 나는 아직 입문강의 과제만 겨
드디어 스프링 첫 팀프로젝트 시작이다.첫째날은 일단 프로젝트를 시작하기에 앞서 S.A(Starting Assignments)를 작성하였다.일단은 와이어 프레임과 API명세서, ERD, UML을 작성하였는데특히 UML을 팀원들과 함께 작성하면서 진행하게될 프로젝트의 전반
오늘 팀프로젝트로 나는 회원가입 기능, 로그인 성공시 토큰생성과 유효성 검증인 JwtUtil을 작성하였다.전부 다 스프링 심화과정에서 진행했던 MySelectShop을 참고해서 해보니 생각보다 할만했고, 내가 예전에 복습했던 졍규표현식을 물론 형식은 똑같았지만 이번에도
스프링 팀프로젝트를 진행하던 중 오류는 아니지만 post 객체를 사용할 때 @Id를 사용하다가@GeneratedValue 어노테이션에 대해 조금 더 자세하게 알게되었다.원래는 뒤에 @GeneratedValue(strategy=GenerationType.AUTO) 이것을
예외처리에 대해서는 그저 IllegalArgumentException를 사용해서 예를들어이런 식으로 작성하는 방법만 알고있었다.하지만 에러를 처리하는 방법으로 따로 구현하여 프론트에서도 에러를 명확하게 알도록 하기위한 방법을 구현해보았다.처음에 프로젝트에 적용을 해보았
오늘 드디어 팀원들과 프로젝트 예외처리까지 마무리하고 발표 준비를 위한 역할을 분배했다.나는 기능 구현의 시연영상 녹화를 맡았는데 1주차 때는 대충 급하게하느라 나레이션이 없었지만 이번에는 정성을 표현하기 위해서라도 나레이션을 넣기위해 대본을 먼저 작성하였다.처음 시작
오전에 팀프로젝트 결과물 시연영상 녹화와 편집을 했고 발표를 무사히 끝낸 후 튜터님의 프로젝트를 시작하기 전에 목표를 정해놓고 진행했다는 거에 대한 칭찬으로 프로젝트가 마무리되었다.KPT는 다들 미리 생각해둔 것들이 많았는지 금방 작성이 완료되었고 아쉽지만 발표날을 마
오늘 프로그래머스 알고리즘 문제를 풀던 도중 직육면체 네모 상자 안에 정육면체 주사위를 채워넣는 문제가 나왔다.머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는
프로그래머스 알고리즘 문제를 풀던 중 알파벳과 숫자로 이루어진 String 문자열인데, 이것을 숫자로만 이루어진 배열로 바꾼 뒤 오름차순으로 정렬하여 반환하라는 문제가 나왔다.문자열을 숫자만 남기는 것은 지난번에 배웠던 .replaceAll에 정규표현식을 사용해서 어렵
오늘 sql 기초 강의가 추가로 지급되었다.대표님 강의였는데 일단 강의 시간이 스프링에 비해 짧다보니 적응이 안되었다.그래도 역시 대표님의 강의는... 정말 좋은거같다.자주 쓰이지만 까먹을거같기도 해서 일단은 예제나 퀴즈는 모두 써보면서 익히는 중인데강의 2개를 듣다보
sql 2일차 강의
알고리즘 문제로 배열 회전시키기가 나왔다 예를들어 파라미터로 배열 [1, 2, 3]와 String "right"가 들어온다면 [2, 3, 1]을 리턴하고, 배열 [1, 2, 3, 4]와 String "left"가 들어오면 [2, 3, 4, 1]을 리턴하도록 하는 함수를 만들라는 것이었다. 나는 처음에 배열을 하나 더 만들고 for문 두개로 각 배열을 돌리...
오늘 팀프로젝트가 시작되었다.고객과 판매자 간의 정해진 주제가 없는 매칭 시스템을 구현하기였는데우리팀은 약간 중고거래가 가능한 블라인드 경매느낌의 시스템을 생각하였다.판매자는 희망 가격과 상품에 대한 정보를 게시하고, 구매를 희망하는 유저는 이 게시글에 구매 요청을 마
원래대로라면 우리팀은 S.A.를 마무리한 후 바로 프로젝트 진행을 할 예정이었지만 조금 더 방향성을 분명하게 잡기위해 프로젝트 설계에 하루를 더 투자하기로했다.우선 API를 튜터님과 매니저님의 피드백을 참고하여 프론트 입장에서도 API만을 보고 무엇을 구현할지 모든 정
프로젝트 진행하던 도중 로그인한 회원이 header에 가지고 있는 토큰을 사용해서 본인의 프로필을 비밀번호 일치 확인 후 수정하게하는 기능을 구현하게되었다.controller에서 스프링의 기능을 사용하여 헤더의 토큰값에 해당하는 사람의 정보를 가져와서 수정해야하는 로직
오늘 프로젝트를 진행하면서 엄청나게 많은 기능들을 배웠다일단 배운것들을 정리하면서 공부해야되는데 오늘 마무리하고 내일 Refactoring 예정이라 주말을 이용할 예정이다
무언가 저장하거나 신청하는 기능 후 성공적으로 완료됐다는 메세지를 반환하는 방법으로 원래는 ResponseDto를 만들어서 내보내냈지만 ResponseEntity를 사용하는 방법을 알게되었다.controller에서 반환타입은 ResponseEntity<Status
4번째 팀프로젝트가 끝나고 오늘은 팀원들과 회고를 진행하였는데이번에는 각자 개인별로 본인의 KPT를 노션에 작성하여 제출하였다.하루에 2회 진행상황 보고 및 어려운점 등을 공유하며 프로젝트 진행프로젝트에 필요한 인텔리제이 Version이나 Naming Convensio
@Mock : Mock 객체를 만들어 반환해주는 어노테이션@InjectMocks : 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션@Spy : Stub하지 않은 메소드들은 원본 그대로 사용하는 어노테이션Given-When-Then 패턴given : 테스트에 필요한
오늘 어제 실패했던 팀프로젝트 코드를 가지고 테스트코드를 다시 진행해보았다. 어제는 아무리 해봐도 안되던 코드가 오늘 다시 해보니 왠지모르게 오류가 발생하지 않았다. 어제 엄청 데이면서
최종 프로젝트를 시작되었고, 우리팀은 먼저 프로젝트 컨셉을 정하였다. 하루의 시작과 끝 두번을 정하여서 자신이 듣고싶고 추천하고 싶은 노래를 게시글에 노래의 정보와 글 내용을 함께 적어서 게시할 수 있는 커뮤니티 사이트이다. 사람들끼리 게시글에 댓글, 좋아요를 누를 수 있으며 본인과 취향이 비슷하다면 팔로잉 기능으로 그 사람의 게시글도 자주 볼 수 있다. ...
S.A. 작성 마무를 위해 팀원들과 아주 긴 시간의 회의를 가졌다... 대략적인 팀 소개와 그라운드 룰을 정하였고 컨벤션까지 정하였다. 팀원들마다 선호하는 방법이 제각각이었지만 여러가지 방법을 사용해보는 의도로 금방 결정되었다. 프로젝트에서 사용되는 기능들을 나열하고,
일단은 ERD 작성을 완료했고 그것을 바탕으로 API를 작성하던 도중 이게 우리가 의도했던 기능들을 구현하려면 ERD가 변경되어야하는 부분이 많이 생겼다...결국 API와 ERD를 왔다갔다하며 새로 다시 갈아엎는걸 반복하며 끝없는 회의를 반복고,그러다보니 멘탈과 뇌를
S.A. 작성에 대한 내용 정리를 마무리했고, 팀원들과 분업을 하기 전에 각자 프로젝트 시작 환경을 구성하기로했다. 지난 프로젝트에서 피드백으로 들었던 Service단은 Entity보다 개수가 많은게 이상적인 코드라는 내용을 팀원들과 상의해보았고, 결론은 지난 프로젝트
우리 팀은 본격적으로 프로젝트 진행을 위해 기초 구성을 마무리하기로했다.각각의 기능들을 테스트해보기 위한 대략적인 프론트 구성을 2명, 백엔드에서 기초가 되고 어려운 시큐리티와 회원가입, 로그인, 로그아웃 기능 구성을 2명,마지막으로 우리 프로젝트에서 사용될 데이터를
회원가입 기능에서 클라이언트가 입력한 데이터 값을 frontEnd로 가져오기클라이언트가 input box에 채워넣는 내용을 받아오기 위해html의 해당 박스에name, id, placeholder를 입력한다.여기서 type이 password인 녀석은 input box에
application.properties 안에 들어있는 고객의 개인정보들과 같이 Github에는 올리고싶지는 않고 로컬 환경에서 팀원들끼리만 내용 공유를 하기위해 .gitignore 에 대해 여러 블로그들을 찾아보았다.처음 여러 블로그들을 참고해보니 .gitignore
시큐리티 구현을 위한 방법들을 여러가지 찾아보았는데내가 이해할 수 있는 방법은 대충 3가지 정도가 되는거같았다.레디스 사용리프레시토큰 생성 후 DB에 저장하여 관리리프레시토큰 생성 후 httpOnly 쿠키로 관리모두 정확하게 이해한 것은 아니라서 위에 설명이 애매하지만
유저가 이메일을 작성 후 인증코드를 요청하면 EmailService에서 6자리 난수를 생성하고 프론트에서 받아온 이메일과 생성된 인증코드를 별도의 테이블을 생성해 저장해두며,동시에 JavaMailSender를 이용해 유저의 이메일로 메세지와 코드를 함께 전송한다.유저는
어제 2번 고민의 방법으로emailCode라는 table에 column으로는email(인증 시도한 유저의 이메일), code(유저가 지급받은 인증코드), emailAuthentication(인증 완료인지 enum상태) 이렇게 3가지 column을 만들었고유저가 입력한
회원가입 시 이메일 인증 기능 구현을 완성한 뒤추가적으로 DB에 저장된 정보들을 자동으로 삭제하는 기능을 만들어보았다.처음에 가장 먼저 생각난 것은 @Scheduled 를 사용하는 방법으로 이렇게 작성해보았더니 삭제해야될 객체를 특정할 수 없어서 그저 3분마다 삭제하는
문제 : 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.가장 먼저, 내가 처음 생각했던 방법은 단순히 배열을 돌려서 가장 큰 수와, 그 다음으로 큰
A. 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나로, 객체들 간의 상호작용을 중심으로 코드를 구성하는 방법론입니다.OOP는 클래스(class)와 객체(object)라는 개념을 사용합니다. 클래스는
Q1. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요. A1. 의존성 주입은 객체 간의 의존성을 줄이기 위한 디자인 패턴으로, 객체를 생성하고 연결하는 작업을 개발자가 직접 하지 않고 프레임워크에서 대신 처리합니다. 이
A1. 하나의 큰 애플리케이션을 작은 독립적인 서비스들로 분할하여 개발하는 아키텍처입니다.서비스마다 자체 데이터를 가지고 있으며, 서비스 간 통신은 HTTP API를 통해 이루어집니다.MSA는 큰 애플리케이션을 분할함으로써 서비스 단위의 확장성과 재사용성을 높이며, 개
Q1. List, Set, Map, HashMap의 차이에 대해서 설명해주세요. Q2. Parameter와 Argument의 차이에 대해 설명해주세요.
A1. 프로세스는 운영체제에서 실행되는 프로그램의 인스턴스입니다. 프로세스는 운영체제로부터 자원을 할당 받아 실행되며, 독립된 메모리 영역을 가지고 실행됩니다. 각각의 프로세스는 독립된 메모리 공간을 할당 받아서, 프로그램 코드, 데이터, 스택 등을 저장하고 실행됩니다
A1. 트랜잭션(Transaction)은 데이터베이스(Database)에서 상호작용하는 작업 단위를 의미합니다. 보통 하나의 논리적인 작업을 수행하기 위해 여러 개의 데이터베이스 연산(INSERT, UPDATE, DELETE 등)이 필요한데, 이러한 연산들을 논리적인
A. Array: 배열은 메모리 공간에 연속적으로 저장된 데이터의 집합입니다. 배열의 특정 위치에 저장된 요소를 O(1)의 시간 복잡도로 액세스할 수 있습니다. 배열은 크기가 고정되어 있으며 삽입 및 삭제가 비효율적입니다.Linked List: 연결 리스트는 데이터 요
A1. 알고리즘이란 컴퓨터에서 문제를 해결하는 절차를 말합니다. 알고리즘의 효율성은 문제를 해결하는 속도와 메모리 사용량에 영향을 미칩니다. 이러한 효율성을 측정하는 방법으로 시간복잡도(Time Complexity)와 공간복잡도(Space Complexity)가 있습니
A1. RDB (관계형 데이터베이스)는 데이터를 행과 열로 구성된 테이블로 나타내며, 데이터의 구조와 제약조건을 사전에 정의하고 데이터를 저장합니다. 대표적인 RDBMS (관계형 데이터베이스 관리 시스템)로는 MySQL, Oracle, Microsoft SQL Serv
A. CORS는 Cross-Origin Resource Sharing의 약자로, 웹 브라우저에서 실행되는 JavaScript 코드에서 다른 도메인의 리소스에 접근할 수 있는 권한을 부여하는 보안 기능입니다.웹 애플리케이션에서는 보안상의 이유로 도메인이 다른 서버의 리소
REST API(Representational State Transfer API)는 HTTP 프로토콜을 이용하여 클라이언트와 서버 간의 통신을 할 수 있는 인터페이스이다. REST API를 사용하면 URI를 통해 특정 자원에 대한 요청을 보내고, HTTP 메소드(GET
DB에 인덱스를 사용하면 인덱스에 의해 데이터들이 정렬된 행태를 갖추어 특정 컬럼에 대한 검색 속도를 향상시켜주는 자료구조이기 때문에, 시스템 전반적인 부하를 줄일 수 있다.그러나 인덱스를 너무 많이 만들거나 인덱싱에 잘못된 열을 사용하는 등 인덱스를 잘못 사용하면 실
제네릭(Generic)은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 것이 아니라 필요에 의해서 지정할 수 있도록 하는 타입을 말한다. 제네릭을 사용하면 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 객체의 타입을 미리 명시해줌으로
파라미터와 아규먼트는 비슷한 개념이지만, 파라미터는 함수나 메서드를 정의할 때 사용되는 변수이고, 아규먼트는 함수나 메서드를 호출할 때 전달하는 값을 말한다.Parameter는 함수나 메서드 정의에 사용되는 변수로, 함수가 호출될 때 입력으로 받을 값을 받을 변수를 의
TCP와 UDP는 인터넷 프로토콜 스위트(IP Suite)에서 사용되는 전송 계층 프로토콜이며, 이 둘은 모두 패킷이라는 작은 단위로 데이터를 분할하여 전송한다.TCP는 연결 지향적 프로토콜이기 때문에 설정 후 데이터를 전송하고, 연결 종료까지 해제하지 않는다.데이터
절차지향, 객체지향, 함수형 프로그래밍은 모두 다른 프로그래밍 패러다임으로, 각각의 방식으로 프로그램을 설계하고 작성하는 방법이 다르다.절차지향 프로그래밍은 프로그램을 순차적인 절차에 따라 실행하는 방식으로, procedure를 중심으로 기능을 모듈화한다. 즉, 일련의
오버로딩(Overloading)은 같은 이름을 가진 메서드나 생성자를 매개변수의 개수나 타입에 따라 다르게 정의하는 것을 말한다. 즉, 메서드 이름은 같지만 매개변수의 타입, 개수, 순서 등이 다른 경우 다른 메서드로 취급한다. 이렇게 함으로써 같은 기능을 하는 메서드
병렬 프로그래밍은 하나의 프로그램을 동시에 여러 개의 프로세스나 스레드 등으로 분할하여 실행하는 기술로대규모 데이터나 계산 집합을 처리해야 할 때 특히 유용하다.병렬 프로그래밍을 나타낼 수 있는 예시로는 하나의 프로세서에서 여러 작업을 처리하거나, 여러 개의 프로세서에
JVM(Java Virtual Machine)은 자바 프로그래밍 언어로 작성된 애플리케이션을 실행하기 위한 가상 컴퓨터이다.JVM은 소프트웨어와 하드웨어 간의 중간 계층으로 작동하여 자바 애플리케이션을 여러 플랫폼과 운영 체제에서 실행할 수 있게 도움을 준다.자바 바이
프로그래머스 코딩테스트 입문 - 약수 구하기정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.라는 문제를 보고먼저 생각난 것은 그저 리스트로 변환한 뒤 for문과 if문을 사용해서 리스트에 담은
OSI(Open Systems Interconnection) 모델은 컴퓨터 네트워크 아키텍처를 기술하기 위해 개발된 개념적인 모델로, 이 네트워크 통신을 7개의 계층으로 분류하여 각 계층이 특정한 기능을 수행하도록 설계되어있다.각각의 계층은 서로 다른 역할과 책임을 지
프로그래머스 문제로 팩토리얼 관련 문제가 나왔다.정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.i! ≤ n처음에 for문을 사용하는 방법을 생각해봤는데 먼저 가장큰 정수가 되는 팩토리얼을 찾는 부분
가비지 컬렉션(Garbage Collection)은 프로그래밍 언어에서 동적으로 할당된 메모리 영역 중에서 더 이상 사용되지 않는 객체들을 자동으로 찾아내고 해제하는 기능을 말한다. 이는 프로그래머가 메모리 관리에 대한 직접적인 처리를 하지 않아도 되도록 해주어 프로그
MVC는 스프링에서 사용되는 프레임워크의 일부로 Model, View, Controller 아키텍처를 기반으로 한다.Model : 애플리케이션의 비즈니스 로직과 데이터를 나타내머, 일반적으로 데이터베이스에서 데이터를 검색하거나 처리한 후 모델 객체에 저장하여 뷰로 전달
프로세스의 정의메모리에 적재되어 실행되고 있는 프로그램의 인스턴스운영체제로부터 시스템 자원을 할당받은 작업의 단위프로세스의 특징프로세스는 독립된 메모리를 할당 받는다.프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고
3-Tier Architecture는 소프트웨어 개발과정에서 사용되는 일반적인 설계 패턴 중 하나이다. 이 아키텍처는 세 개의 주요 구성 요소 또는 계층으로 구성되어 있으며, 각 계층은 특정 기능을 수행한다. 이러한 계층은 데이터 흐름과 역할 분담을 통해 시스템을 구조
my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.이런 문제인데이렇게 접근해보았다.입출력 예시에 있는 "3 + 4"는 정답으로 나왔지
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.유한소수가 되기 위한 분수의 조건은 다음과 같습니다.기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.주어
덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요.이렇게 작성 후 실행해봤더니 에러가 발생했다.알고보니 매개변수로 들어오는 polynomial이 "3x + 7
분수의 덧셈을 위해 덧셈을 한 후 기약분수를 만드는 방법은 분자와 분모의 최대공약수를 각각 나누어주어야 한다.for문을 이용하여 두 수의 최대공약수 구하는 방법최대공약수의 영어 이름은the greatest common divisor(denominator) 이지만,편의상
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.\[x1, y1, x2, y2,
https://dev-coco.tistory.com/70https://mangkyu.tistory.com/125의존성 주입의 필요성\-. Test가 용이해진다.\-. 코드의 재사용성을 높여준다.\-. 객체 간의 의존성(종속성)을 줄이거나 없앨 수 있다
메인 데이터베이스의 커넥션을 획득하 는 스프링 빈은 @Primary 를 적용해서 조회하는 곳에서 @Qualifier 지정 없이 편리하게 조회하고, 서브 데이터베 이스 커넥션 빈을 획득할 때는 @Qualifier 를 지정해서 명시적으로 획득 하는 방식으로 사용하면 코드를
빈이 무엇인지 어떤 종류가 있는지 수동, 자동 실무에서 무엇이 더 좋은지
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 4,3,2,1인 경우는 4,3,2를 리턴 하고, 10면 -1을 리
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.문자열 반복을 위해 바로 생각난 것은 for문을 사용해 String
프로그래머스 알고리즘 문제를 풀던 도중어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다.
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.우선은 내가 어리석게도 문제를 잘못읽
이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 10, 100, 20, 150, 1, 100, 200이라면, 명예의 전당에서 발표된 점수는 아래의 그림과 같이 10, 10, 10, 20,
조합(Combination) : 여러 개 가운데에서 몇 개를 순서에 관계없이 한 쌍으로 뽑아내어 모음. 또는 그 짝. 가령 a, b, c 셋 가운데서 두 개씩 뽑아 모은 조합은 ab, bc, ca의 세 가지이다. \-. 네이버 국어사전 요즘 알고리즘 문제를 풀면서 Co
200 OK : 요청 성공201 Created : 요청 성공으로 리소스가 생성됨202 Accepted : 요청이 접수되었지만 처리되지 않음(ex : 요청 후 1시간 뒤에 처리되는 경우)204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본
@MappedSuperclass : Entity에서 공통의 매핑 정보가 필요할 때 사용(ex : 등록일, 수정일, 등록자, 수정자)상속관계 매핑이 아님Entity가 아니므로 테이블과 매핑되지 않음상속 받는 자식 클래스에 매핑 정보만 제공em.find(BaseEntity
https://github.com/lswoo0705/jpa-prac음반, 도서, 영화의 상품 종류가 추가되고 추후에 더 확장될 수 있다.모든 데이터는 등록일과 수정일이 필수로 있어야 한다.@Inheritance(strategy = InheritanceType.
한 번 객체가 생성되면 내부 상태를 수정하거나 변경할 수 없다. 불변 객체는 객체 지향 프로그래밍에서 많은 이점을 제공한다.기본 타입(Primitive type)기본 타입은 값을 복사한 것이기 때문에 a의 값이 변하지 않음객체 타입객체 타입은 같은 참조를 전달하기 때문
\+, -, \*, / : 더하기, 빼기 , 곱하기, 나누기%, MOD : 나머지IS : 양쪽이 모두 TRUE 또는 FALSEIS NOT : 한쪽은 TRUE, 한쪽은 FALSEAND, && : 양쪽이 모두 TRUE일 때만 TRUEOR, || : 적어도 한쪽만 TRUE이
서브쿼리 : SQL에서 사용되는 쿼리 안에 포함된 또 다른 쿼리를 의미하며, 서브쿼리는 주로 메인 쿼리의 조건이나 결과를 도출하기 위해 사용한다.비상관 서브쿼리 : \-. 서브쿼리가 메인 쿼리와 상관없이 독립적으로 실행.\-. 서브쿼리의 실행은 메인 쿼리의 각 행에 대
JPA에서의 데이터 변경이나 로직들은 트랜잭션 범위에서 영속성 컨텍스트 전략을 사용하고 있기 때문에 가급적 트렌젝션 안에서 처리되어야 한다.readOnly = true를 사용하면 조회 메서드에서 읽기전용 트렌젝션으로 인식되기 때문에 불필요한 리소스를 줄여 성능이 최적화
예전 프로젝트를 진행하며 설계를 했을 때 그저 배운대로 서비스에 주요 기능들을 하는 메서드들을 작성했었다.그거에 대한 이유는 생각해보지 못했었고 그게 당연한줄 알고있었는데이번에 스프링 강의를 듣다보니 객체들간의 관계를 로직을 포함하는 도메인 모델 패턴을 사용해보았다.레
DTO(Data Transfer Object) : 계층(Controller, Service, Repository)간 데이터 전송을 위해 사용되는 객체를 의미DTO를 사용하지 않고 Entity를 그대로 반환하게 된다면 필요로하지 않는 민감한 정보들도 함께 반환되게된다.D
우선, 문자열들을 배열로 변경한 뒤 각각의 인덱스를 index만큼 더하고그 사이에 skip이 있다면 추가로 더하는 방향을 생각해보았다.수정 전 코드이 코드로는 처음 입출력 예의 테스트는 통과했으나제출 후 채점하기에서 처참한 결과가 나왔다.디버그를 실행해서 찾다보니s =
문제 설명지나다니는 길을 'O', 장애물을 'X'로 나타낸 직사각형 격자 모양의 공원에서 로봇 강아지가 산책을 하려합니다. 산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다."방향 거리", "방향 거리" … 예를 들어 "E
캐시는 제한된 리소스 내에서 데이터를 빠르게 저장하고 접근할 수 있어야 하기 때문에 '캐시 교체 알고리즘'을 사용한다.LRU(Least Recently Used) : 직역하자면 '가장 최근에 사용된' 이란 뜻으로, 메모리에 남아있는 캐시 중 가장 오랫동안 사용되지 않은
완전탐색(Brute Force) : 모든 경우의 수를 시도하여 정답을 찾는 방법. 상대적으로 간단한 방법이지만 경우의 수가 많아지면 시간이 오래걸린다.완전탐색의 종류1\. 단순 Brute-Force2\. 비트마스크(Bitmask)3\. 재귀함수4\. 순열
정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조인 그래프를 탐색하는 방법에는 DFS와 BFS가 있다.DFS(Depth First Search) : 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하기 탐색하는 방식모든 노드를 방문하고
로컬 환경에서 완성한 프로젝트를 배포하기 위해 코드들을 수정한 뒤 서버를 실행시켜보니 모든 기능들에 문제는 없었는데소셜로그인 기능에서 로컬호스트 환경에서는 이상이 없던 문제가 발생했다.kakao developers 에서 애플리케이션의 콜백 URL이 올바르게 설정되어 있
MSA : 소프트웨어 개발에서 자주 사용되는 아키텍처 스타일 중 하나로, 대규모 애플리케이션을 독립적인 작은 서비스들로 분할하여 개발, 배포, 유지보수하는 방식을 말한다. 각 마이크로서비스는 고유한 비즈니스 기능을 가지고 있으며, 독립적으로 배포되고 확장될 수 있다.
쿠버네티스(Kubernetes) 쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 자동 배포, 스케일링 및 관리를 위한 오픈 소스 플랫폼이다. 애플리케이션을 컨테이너 단위로 나누어 관리함으로써 개발 및 운영 효율성을 극대화할 수 있다. Spring Cloud
Redis : 오픈 소스 인메모리 데이터 구조 저장소로 주로 캐시, 메세지 브로커, 데이터베이스 등 다양한 용도로 사용된다. 빠른 성능과 다양한 데이터 구조를 지원하므로 많은 애플리케이션에서 전반적인 성능을 향상시킬 수 있따. Redis의 특징 인메모리 데이터 저장 : Redis는 모든 데이터를 메모리에 저장하여 매우 빠른 읽기/쓰기 성능을 제공하기 때...
Spring Data Redis는 스프링 프레임워크에서 제공되는 모듈로, 주로 Redis를 데이터 저장소로 사용할 때 JpaRepository와 유사한 CrudRepository 인터페이스를 t사용하기 때문에 CRUD 연산을 쉽게 정의할 수 있다.Redis의 데이터 구
캐싱(caching)은 데이터 또는 계산 결과를 임시 저장하여 재사용하는 기술로, 주로 성능을 최적화하고 응답 시간을 줄이기 위해 사용된다. 캐시는 본래 저장된 곳이 아닌 곳에 데이터를 저장하는 행위이기 때문에 언제든 데이터가 사라질 수 있으므로 너무 크게 관리되어서는
1\. 이미지 관련 명령어이미지 빌드 : 현재 디렉토리의 Dockerfile을 기반으로 myapp이라는 이름의 이미지를 생성합니다. -t 옵션을 사용하여 이미지의 이름과 태그를 입력 할 수 있습니다.이미지 가져오기 : 도커 허브에서 해당 이미지를 가져옴이미지 목록 보기
Docker는 소프트웨어 개발 및 배포를 위해 널리 사용되는 컨테이너 플랫폼으로, Docker를 사용하면 애플리케이션과 해당 종속성을 컨테이너라는 단위로 패키징하고 이 컨테이너를 다양한 환경에서 일관되게 실행할 수 있다.이미지 (Image) : 컨테이너를 생성하기 위한
프로젝트를 진행 후 Product api를 완료하여 포스트맨으로 테스트해보기로 했다. 하지만 404 error가 발생했고 Gateway(19091)포트로 보낸 요청은 404 error가 발생하고 Product(19093, 19094)로 요청을 보냈을 때만 요청이
여러 마이크로서비스가 서로 통신할 때, 데이터의 기밀성, 무결성, 인증, 권한 부여 등을 보장해야 한다. 이를 위해 다양한 보안 전략과 기술이 필요한데, 다음은 마이크로서비스 간 통신의 보안을 보장하기 위한 주요 방법들이다.OAuth 2.0 : 인증을 위해 OAuth
인터넷의 많은 사용자들에 의한 동시다발적인 요청을 수용할 수 있는 시스템은 중요하다 라고 볼 수 있는데, 그 방법들 중 큐를 이용한 스트림 처리방법은 데이터를 순차적으로 처리하고 시스템 간의 비동기 통신을 가능하게 하여 확장성과 유연성을 크게 늘려줄 수 있다.초당 처리
RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어로, 메시지 전송과 수신을 관리하고 조정하는 역할을 하며, 주로 애플리케이션 간의 비동기 통신을 위한 메시지 큐잉을 지원한다. 메시지 큐잉 : 메시지를 일시적으로 저장하고 관리하며, 프로듀서와 컨슈머 간의 메시지
Monitoring 모니터링은 시스템의 안정성을 유지하고, 성능을 최적화하며, 문제가 발생할 경우 신속하게 대응할 수 있도록 상태와 성능을 실시간으로 감시하고 기록하는 활동을 말한다. 지표 수집(Metrics Collection) : CPU 사용량, 메모리 사용량,
CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션이 다른 도메인에서 리소스를 요청할 수 있게해주는 메커니즘을 말한다. 보통 브라우저는 보안상의 이유로 스크립트가 자신의 출처가 아닌 다른 출처의 리소스에 접근하는 것을 금지하기 때문에 프로
배달 주문을 관리하는 어플리케이션의 API 명세서를 작성하는 연습을 하는데 궁금점이 생겼다. 회원가입 관련된 api 단계에서 일반 고객의 회원가입, 가게 주인의 회원가입, 관리자 회원가입 이렇게 따로 나눠서 관리해야될지에 대한 고민이었는데 일반 고객, 가게 주인, 관
DB Lock은 데이터베이스에서 여러 사용자가 동시에 데이터를 읽거나 쓰는 작업을 수행할 때, 데이터의 일관성과 무결성을 보장하기 위해 특정 데이터에 대한 접근을 제어하는 메커니즘을 말한다. 주요 목적 동시성 제어: 여러 트랜잭션이 동시에 실행될 때, 데이터의 일관성
레이어드 아키텍처(Layered Architecture)는 소프트웨어 애플리케이션을 여러 계층(layer)으로 분리하여 각 계층이 명확한 책임을 가지도록 설계하는 방식으로, 이를 통해 코드의 모듈화와 유지보수성을 높일 수 있으며 각 계층 간의 의존성을 줄여 변화에 유연
앱을 이용한 주문 관리 플랫폼 팀프로젝트를 진행하기 전에 S.A를 팀원들과 작성했다. 1. API 명세서 를 사용하는 것이 어떻겠냐는 피드백이 나왔다.https://velog.io/@lswoo0705/TransactionalreadOnly-true예전에
검색 api를 구현하던 중 @GetMapping과 @PostMapping 중 어떤 메소드를 사용하는 것이 올바른지에 대해 고민이 생겼다.분명 검색어인 keyword를 입력해서 접근하지만 주 목적은 검색된 결과이기 때문에 @GetMapping이 적절하다 생각되었지만 확실
프로젝트를 진행하던 도중 다른 팀원분의 PR에 또 다른분이 남기신 comment 내용이 눈에 띄었다. 객체의 정보를 업데이트하는 이 코드에 대해서 객체의 불변성을 지키기 위해 객체의 속성값을 직접 변경하는 대신 변경된 속성값을 가진 새로운 객체를 반환하는 것이 어떻겠
Service 클래스에서 무언가의 정보를 반환할 때 ResponseDto를 사용하게되는데, 이 때 만약 필요한 필드가 복잡하지 않다면 우리에게 친숙한 Getter를 사용하여 코드가 덜 복잡하고 속도가 빨라질 수 있다. 하지만 만약 필드가 복잡하고 다중 스레드 환경에서
api에 접근을 제어하기 위해 Controller에 userDetails로 받아온 유저의 권한을 확인하는 로직이 필요하다. 나는 그 기능을 userDetails에서 userRole을 받아와 조건문으로 권한이 일치하는지 확인하는 코드를 작성했었는데 프로젝트 팀원분이
프로젝트를 진행하며 객체가 저장될 때 나는 당연히 createdAt 필드에만 값이 들어가고 updatedAt에는 저장되지 않는다고 생각했다.하지만 일부 프레임워크나 ORM은 Entity의 수명 주기 관리의 일부로 createdAt과 함께 updatedAt을 자동으로 설
저장된 객체의 필드값이 null일 경우에 생기는 문제가 있다.이 객체에 대한 정보를 요청할 때 사용자는 null 이라는 정보를 확인하면 안되기 때문에 null로 저장되어있는 필드를 숨길 필요가 있다.만약 description 필드의 값이 null 이라면이렇게 반환될것이
새로운 팀 프로젝트를 시작하여 필수 구현 기능을 확인하던 중 슬랙 앱을 생성하고, API를 통해 메시지 발송 기능을 구현하라는 항목이 있었다.처음에는 형식상으로만 메시지가 발송된거처럼 구현하라는건가? 싶었지만 찾아보니 웹훅을 통해 메시지를 포스트맨을 이용해서도 발송할
프로젝트를 진행하며 UserDetailsImpl에서 접근한 사용자에 대한 정보를 가져와 접근에 대한 인증 기능으로 많이 사용하였었는데security 부분에 약하다보니 나중에 로그인 기능을 제대로 구현해보기 전 미리 알아보기로 하였다.SecurityContextHolde
Record는 Java 16에서 정식으로 출시된 클래스 유형으로, 주로 불변 객체를 생성할 때 사용한다.장점 : 간결한 코드, 불변성, 직관적인 데이터 표현, 메모리 효율성.단점 : 불변성으로 인한 데이터 수정의 어려움, 상속 불가, 복잡한 로직 처리의 제한, 오래된
프로젝트에서 지금까지 제대로 구현하지 못했던 인증/인가 기능을 도전해보기로했다.일단은 강의자료와 전에 구현했었던 코드들을 참고하여 모놀리식으로 우선 구현을 해봤는데금방은 아니지만 로그인하여 jwt가 반환되는 것을 확인했다.이제 이것을 MSA로 바꾸면 되는데강의를 다시
상황 1 회원가입을 진행한 유저가 로그인을 요청할 때 회원가입과 로그인은 권한에 대한 인증 처리가 필요하지 않으므로 if문을 통해 회원가입과 로그인에 대한 요청 접근은 필터를 통과하지 않도록 처리한다. 라우팅 설정으로 auth의 엔드포인트로 접근하는 요청은 aut
팀원분이 구현해주신 공통 모듈을 내가 만든 서비스들에 적용해보기로했다. 사용법은 공유받았는데 우선 root project에 settings.gradle 파일에 다음과같이 포함될 서비스들의 정보를 입력한다. 여기서 settings.gradle을 설정해주었으므로 각 프
스프링에서 기상청에서 날씨 정보를 요청하는 api를 연동한다. 기상청 단기예보 조회서비스에 활용신청을 한 수 serviceKey를 발급받아 uri를 입력하고 실행하는데 200 OK가 뜨지만 이런식으로 12번 에러가 발생했다. 찾아보니 API 서비스가 없거나 폐기.
예약 메시지를 보내는 기능을 구현하기 위해 아무 생각없이 메서드에 @Scheduled 어노테이션을 달아놨다. 근데 포스트맨으로 메서드를 실행해보니 바로 dm이 와졌다. 알고보니 @Scheduled 메서드에는 매개변수를 사용할 수가 없었고 해결방법을 찾아보니 여거가지
프로젝트를 진행하며 팀원의 코드를 보던 중 이런 식으로 Dto 안에 Page로 감싼 Dto가 또 있는 형식을 보게되었다. 설명을 들어보니 반환 타입이 Page면 Redis로 처리할 수 없어 Dto를 한번 더 포장하였고, Page를 Redis로 처리하는 여러가지 방법
도메인 주도 설계(DDD)에서 JpaRepository와 같은 영속성 계층의 위치와 의존성 관리에 대해 특강에서 배우게되었다.DDD에서는 비즈니스 로직과 데이터 접근 로직을 명확히 분리하는 것이 중요하다. 이를 위해 일반적으로 Repository 인터페이스는 도메인 영
Prometheus는 시계열 데이터를 수집하고 저장하는 오픈소스 모니터링 시스템으로, 주로 애플리케이션의 성능 지표를 추적하는 데 사용된다.주요 특징:시계열 데이터 저장: CPU, 메모리 사용량, HTTP 요청 속도 등 다양한 성능 메트릭을 수집하고 시계열로 저장.Pu
Grafana Loki는 분산 시스템의 로그 데이터를 수집하고, 저장하며, 쿼리하는 데 사용되는 오픈 소스 로그 집합기, 로그를 메타데이터와 함께 저장하여 사용자가 쉽게 필터링하고 쿼리할 수 있게 해준다.스케일 아웃 아키텍처: 클러스터링을 통해 수평 확장이 가능하여 대
부하 테스트 도구인 JMeter 말고도 Gatling과 nGrinder가 있다는 것을 알게되었다.각각의 장,단점과 테스트에 적합한 환경을 정리해보았다.특징:사용성: JMeter는 GUI 기반으로 사용이 가능하며, 초보자도 쉽게 사용할 수 있다. 비전문가도 직관적인 인터
Prometheus로 메트릭 데이터를 수집하여 DB에 저장하고, Grafana를 이용해 데이터를 가져와 시각화 하는 과정 Prometheus 연동 내가 사용할 프로젝트의 각 서비스에 Actuator 의존성을 추가하고 yml 파일에서 각 서비스를 scrape_conf
부하 테스트를 세팅 - JMeter JMeter 다운로드 링크 > https://jmeter.apache.org/download_jmeter.cgi 터미널 명령어로 다운로드된 폴더에 bin 경로로 들어가서 jmeter.sh 파일을 실행 테스트 계획 우클릭 -> 추
원래 목적은 master 노드 1개, slave 노드 3개를 생성하려고 했지만, cluster를 생성하다보니이런 에러를 확인하였다.최소 3개 이상의 master가 있어야 장애 조치가 가능한데, 만약 마스터가 1개뿐이라면 해당 마스터가 다운되었을 경우 클러스터는 데이터를
프로젝트의 검색 기능에 QueryDSL을 적용해보기로 했다. QueryDSL(Query Domain Specific Language) Domain도메인 Specific특화 Language언어 데이터를 다룰 때 Table에 종속되지 않고 객체에 특화된 쿼리 언어 쿼리를
Spring의 캐시 추상화를 지원하는 캐시 관리자로, Redis를 캐싱 백엔드로 사용하는 설정이다.@Cacheable, @CachePut, @CacheEvict 같은 어노테이션을 사용하여 메서드의 결과를 자동으로 Redis에 저장하고, 메모리에서 바로 읽어오는 방식으로
프로젝트에서 공연 조회 등 짧은 시간에 반복적으로 요청되는 api는 매번 호출이 될 경우 처음 요청만 DB에 접근하고, 그 이후 요청들은 캐시에서 데이터를 가져오므로 DB의 부하를 줄이면서 응답 시간이 크게 단축시킬 수 있다.캐시를 구성하는 설정 클래스이제 각 서비스에
BFS(Breadth-First Search)는 그래프나 트리를 탐색하는 알고리즘 중 하나로, 시작 노드에서 가까운 노드부터 차례대로 탐색하는 방식을 말한다. 큐(Queue) 자료구조를 사용하며 탐색 순서는 레벨 단위로 진행된다.특정 지점에서 다른 지점까지의 최단 거리
DFS(Depth-First Search)는 그래프나 트리를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 깊이 들어가며 탐색하는 알고리즘이다.스택(Stack) 자료구조를 사용하거나 재귀 호출을 통해 구현되며, 한 노드에서 다음 노드로 갈 수 있는 만큼 깊이 들어간
MSA와 모놀리틱은 서비스의 구조와 관리 방식에서 차이가 있다고 생각합니다.우선, 모놀리틱 아키텍처는 하나의 애플리케이션 안에 모든 기능이 통합된 구조로초기에 개발 속도가 빠르고 배포와 테스트가 간단하다는 장점이 있지만 소스코드가 커질수록 유지보수가 어렵고, 일부 수정
MSA 프로젝트를 진행하며 서비스간의 요청에서 서버에 문제가 생겼을 경우 해결하는 방법에 대해 알아보던 중 보상 트랜잭션과 Fallback 메서드에 대해 알게되었고, 적용해보기 위해 이 둘의 차이점에 대해 알아보게되었다.보상 트랜잭션은 분산 트랜잭션에서 일부가 실패했을
서킷 브레이커 패턴은 장애가 발생한 서비스를 감지하고 더 이상 요청을 보내지 않도록 차단하여 장애가 퍼지지 않도록 격리하는 방법이다. 서킷 브레이커는 주로 CLOSED, OPEN, HALF_OPEN 세 가지 상태로 나눠지는데 각각의 상황에 따라 시스템의 요청을 어떻게
MSA 프로젝트를 구현하던 도중 분산 시스템을 사용하게되면서 트랜잭션 관리가 중요해졌다. 그 방법들 중 SAGA 패턴이란 게 어떻게 작동하는지, 그리고 보상 트랜잭션에 대해 알아보게되었다.SAGA 패턴은 분산 트랜잭션을 관리하기 위한 방법 중 하나로, 여러 개의 서비스
비동기 처리의 필요성 비동기 처리는 특정 작업이 완료될 때까지 기다리지 않고 다른 작업을 동시에 수행할 수 있도록 하는 방식으로, 시스템의 응답성과 처리 속도를 크게 개선할 수 있다. 예를들어 예매 취소 API에서 데이터베이스에 공연장을 생성하는 작업이 발생하는 동안
알고리즘 문제 풀이 도중 두 수의 최대공약수를 구해야하는 과정이 있었다.원래 사용했던 반복법을 찾아보기 위해 검색하다보니 유클리드 호제법 이라는 키워드를 알게되었고 자세하게 알아보기로 했다.유클리드 호제법(互除法)은 두 개 이상의 양의 정수의 최대공약수를 구하는 방법으
좌표평면을 좋아하는 진수는 x축과 y축이 직교하는 2차원 좌표평면에 점을 찍으면서 놀고 있습니다. 진수는 두 양의 정수 k, d가 주어질 때 다음과 같이 점을 찍으려 합니다.원점(0, 0)으로부터 x축 방향으로 ak(a = 0, 1, 2, 3 ...), y축 방향으로