이번 내일배움캠프 스파르타코딩클럽 Spring 과정의 첫 프로젝트가 끝이 났다.프로젝트를 팀원들과의 협업을 통해 진행하면서 느꼇던 점을 KPT회고를 통해 정리해본다.Keep 막히거나 오류가 발생하는 부분에서 팀원들과의 의사소통으로 문제를 해결한 부분진행도를 정기적으로
Java 문법 종합반 수강하며 배운것들을 사용하여 직접 키오스크 프로그램을 만드는 과제를 시작하게 되었다...맨처음 과제를 보았을때 보자마자 머리가 멍해짐을 느꼈다. 주어진 시간이 그리 길지 않기에 마음을 다잡고 차근차근 필수 요구사항과 출력예시를 보고 구현 방향을 설
이전 시간까지는 카테고리에 메뉴들을 ArrayList배열의 Product객체을 타입으로 입력받아 추가저장하는 과정까지 작성하였다.이후 과정으로는 카테고리 페이지에서 번호를 입력받으면 각각의 카테고리 및 장바구니와 주문취소화면이 나오도록 작성하였다.스위치문을 사용하여 각
키오스크의 필수 요구기능은 구현완료하여 추가적인 기능을 구현하였다. 상품을 고르면 옵션을 넣어 메뉴의 사이즈를 고를수있는 기능을 구현하였다. coffecategory
개인과제가 끝나고 팀프로젝트 주간이 시작되었다.본격적으로 Java를 활용한 팀프로젝트가 시작되었다.팀 프로젝트로 기존 개인과제로 만든 키오스크프로그램을 더 발전시켜 키오스크 관리프로그램을 추가하여 메뉴와 상품의 추가, 삭제 및 대기,완료 주문목록 조회 등 추가 기능을
심화반 특강으로 객체 지향프로그램을 다시 한번 되짚고 넘어가는 시간을 가졌다.객체지향프로그램의 정의는 위와 같다. 말로는 어려우니 그림예시를 통해 이해해보자.만약 우리가 Human, Dog, Cat을 만든다고 생각해보자.물론 Human의 머리~발끝순으로 만들어도 되지만
지난시간에 이어 키오스크프로그램의 상품 추가 기능을 구현하였다.오늘 작성한 코드를 리뷰해보자.처음시작은 List로 짜여진 각 메뉴의카테고리와 메뉴리스트를 그대로 사용할려고 하였지만 상품의 추가, 삭제 기능에는 만약 기존 메뉴가 없는 상품의 경우 메뉴또한 추가하여야 했기
팀프로젝트 마지막
데이터베이스(Database) 데이터베이스는 우리가 흔히아는 데이터들의 집합으로 데이터를 효율적으로 관리하기위해 만들어진 데이터의집합이라고 볼수있다. 이러한 데이터베이스는 DBMS(Database Management System)으로 불리는 관리소프트웨어로 운영하게 되
Lombok이란? 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동 생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리입니다.지금까지 개인, 팀 프로젝트를 진행하면서 해당 인스턴스이 값을 가져오거나 오버로딩된 생성자 생성 등 직접적으로
우리가 회원가입, 단어검색, 상품주문 등 여러가지 인터넷상에서 활동을 할때 우리의 데이터를 서버에 전달해줘야하는 경우가 발생한다.이때 어떻게 데이터가 전송이 되며 전송이된 데이터가 어떻게 서버에서 다뤄지는지 알아보자.클라이언트에서 아래와 같이 Get요청을 보냈다고 가정
앞선 게시글에서 우리는 브라우저(클라이언트)로부터 서버가 어떤 방식으로 데이터를 담아 요청을 받는지 알아보았다. URL에 데이터를 붙여 전송하는 방식은 데이터의 보안에 취약하다는 것을 알아보았다. 이러한 문제때문에 브라우저(클라이언트)와 서버간의 데이터를 전달하는 과
주특기 입문 개인과제로 익명 게시판 서버를 구현하였다.과제 시작 전 Use Case Diagram과 API명세서 등을 작성하며 기본적인 CRUD기능의 구현을 목표로 서버 구현의 방향성을 계획하였다.노션링크그리고 RESTful한 API설계를 위해 Controller, S
하드웨어 기술의 발전 및 새로운 요구사항의 탄생으로 자바(JAVA)또한 새로운 변화를 맞이하려하고있다.자바가 시장에서 요구하는 생태계를 맞이하기 위한 변화로는 크게 두가지로 병렬 처리와 함수형 프로그래밍이 있다. 이중 함수형 프로그래밍에 대해 다뤄볼것이다.함수형 프로그
DB를 직접적으로 다룰때 어떤 문제들이 발생할까?앞선 프로젝트를 통해 DB에 ID, name, content 등 여러 데이터를 한대 묶은 객체형태로 CRUD해왔다. 이때 SQL문을 통해 직접 DB에 접속하여 테이블을 생성하고 애플리케이션에서 SQL을 작성하여 JDBC를
앞선 게시글에서 JPA의 기본개념을 알아보았다. 그럼 JPA는 어떻게 DB와 소통을 하며 주어진 요청을 어떻게 처리하는걸까? 영속성 컨텍스트
Java환경에서 JPA를 이용하여 서버를 구현하였다. 그럼 SpringBoot에서의 JPA는?먼저 말하자면 SpringBoot는 Java에서보다 더욱 더 쉬워졌다.어떤 면이 쉬워졌는가는 설정부터 시작해서 차차 알아보자우선 build.gradle에 spring-boot-
JPA를 사용하기 전 자바에서 SQL문을 통한 MYSQL DB를 구현할때 테이블간의 관계를 외래키(FK)를 통해 구현했다. 이때 테이블의 관계를 좀더 알아보자.만약 어떤 손님들의 목록이 저장된 Customer테이블이 있으며 또한 저장된 손님들이 주문한 음식목록이 들어있
Filter는 클라이언트로부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할수있다. 주로 범용적으로 처리해야하는 작업들인 로깅 및 보안 처리등에 사용된다. 구체적으로 인증,인가 관련 로직을 처리할수
이전 게시글에서 필터에 관해 다루었다. 필터에서 인증,인가 절차를 개발자가 직접 구현할수도 있지만 SpringBoot는 개발자의 수고를 덜기 위해 Spring Security를 지원한다.스프링 시큐리티 사용 전스프링 시큐리티 사용 후스프링 시큐리티는 기존의 서비스, 필
우리는 RESTful API로 설계하는 것이 좋은 설계라고 배웠다. 그럼 RESTful API를 위해 우리는 클라이언트와 서버 간의 통신에 대한 필요한 정보를 클라이언트한테 전달해줘야한다. 그때 유용하게 사용할수 있는것이 ResponseEntity이다.
앞선 과제에서는 매 요청마다 비밀번호를 보내 DB와 대조후 일치시에만 요청을 수행하였다. 하지만 매번 비밀번호를 담아 요청을 보내는것은 보안상 좋지않다. 그렇다면 어떠한 해결방법이있을까? 쿠키와 세션 >쿠키 : 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은
익명게시판, 투두리스트에 이어 이번엔 뉴스피드 팀 프로젝트가 시작되었다.발제 첫날로 팀원들과 개발의 방향성에 대해 토의하였다.필수 요구 기능은 투디리스트에서 요구하던 기능과 유사한 기능을 요구하고 있었고 추가적으로 사용자 프로필 수정기능과 뉴스피드 기능이 추가되었다.
본격적인 뉴스피드 백엔드 개발이 시작되었다. 내가 맡은 게시글 CRUD부분을 구현하면서 발생한 오류 및 중요한점을 적어 나갈예정이다.게시글 CRUD 기능을 구현하면서 기능 로직자체를 구현하는것도 고민이였지만 가장 큰 고민은 어떻게 예외처리를 하는가 였다. 게시글의 전체
이전에 JWT에 대해 알아보았다면 이번에는 더나아가서 엑세스토큰(Access Token)과 리프레시토큰(Refresh Token)에 대해 알아보자이전에 다뤘던 JWT한개로만의 인증방식은 Access Token하나로 인증하는 방식과 같다고 보면되는데 이것에 문제점은 토큰
이전 과제에서 같은 서버내에서 다른 API(내부 API)를 호출하여 기능을 구현하였다. 그렇다면 다른서버의 API(외부 API)는 어떻게 호출하여 사용하는걸까?서비스 개발을 진행하다보면 라이브러리 사용만으로는 구현이 힘든 기능들이 무수히 많이 존재한다. 예를 들어 우리
개발자들은 언제나 기능을 구현 후에 대해서도 생각을 하여야한다고 생각한다. exception과 같이 개발자가 예측가능한 예외상황이나 예측이 불가능한 상황등 여러 상황에 대해 최대한 많은 테스트를 거쳐야 한다.위 그래프는 개발진행도에 따른 버그발생시 비용소모를 그래프화
만약 사이트 이용고객중 이용시간으로 순위를 매겨 Top5에게 경품을 주기위해 모든 고객의 사이트 이용시간이 필요하다고 하자 우리는 어떻게 고객의 사이트 이용시간을 구할수있을까?우선 Aop에 대해 알아보자면 Asepect Oriented Programming의 약자로 관
이번 개인과제는 기존의 만들었던 ToDo application에 대한 테스트코드작성을 했다.코드를 구현하면서 기록에 남길만한 것들을 추려서 작성해볼것이다.우선적으로 테스트코드의 작성에 있어서 slice test에 대해 짚고 넘어갈것이다.slice test는 앞서 게시한
이번 팀프로젝트는 김밥천국 배달앱을 만들기로했다. 로그인 후 배민처럼 음식을 보고 골라서 장바구니에 넣고 주문을 하는 서버를 만드는것을 목표로하였다.우선 설계단계에서의 API 명세와 ERD 작성은 매우 중요함으로 팀원들과 상의하에 최대한 자세한 API명세를 작성하였다.
어제에 이어 오늘은 수립한 API명세에 따라 JWT를 이용한 인증인가 회원가입,로그인 기능을 구현하였다.지난 프로젝트에서도 jwt를 사용하였지만 이번과는 다르게 하나의 AccessToken만 사용한 형태의 스프링시큐리티 인증,인가 기능을 구현하였기 때문에 이번에는 두개
지난 게시글의 ATK와 RTK구현에 이어 계속해서 jwt인증,인가 서비스개발을 지속하였다.ATK와 RTK의 생성과 재발급을 구현해서 로그인기능을 구현을 했다면 다음은?statless의 특성을 지닌 JWT의 특성상 이미 발급한 토큰을 서버에서 직접 무효화 할수있는 방법은
일주일간의 팀프로젝트가 끝이났다. 여러모로 아쉬운점, 만족스러운 점이있었지만 앞으로 내가 뭘해야할지 알게된 팀프로젝트였다. 언제나 그렇듯 당초 계획과는 다른 결과의 ERD가 되었다. 어느부분과 달라졌는지 살펴보면 우선 처음 설계당시 우리는 한 가게에서의 메뉴 및 장바구
Service 인터페이스와 구현체 분리 추상화에 대해 알아보자.오늘 Service의 추상화를 통한 코드개선 과제를 진행하였다. Service의 추상화란 무엇이며 왜 하는것일까?Service의 추상화에 대해 조사하는 중에 Spring AOP에 대한 관련이 있다는 사실을
지금까지 대부분의 프로젝트를 JPA를 사용하여 DB를 사용해왔다. JPA의 대분류인 ORM이 탄상하게된 배경은 어떻게 될까?DB가 탄생한 이후 해당 DB와 JAVA앱과 연동하기 위해 JDBC가 탄생하였다.Java Database Connectivity의 축약어로 문장그
당초 예정은 ORM에 대해 본격적으로 알아볼 예정이였지만 Redis를 활용한 Email인증구현이라는 하나의 과제를 달성하여 해당 기능구현과정을 먼저 정리해둘려고 한다.주어진 과제를 보아하니 email or SNS 인증을 구현하는대 인증번호의 유효시간은 5분을 두고 Re
지난 게시글에서는 ORM의 탄생이전까지 역사를 얘기했다.그럼 ORM의 특징과 ORM이 풀어나가야될 과제는 무엇이있을까?ORM은 QueryMapper의 DB의존성 및 중복 쿼리 문제로 탄생하였다고 얘기하였다. ORM은 기존의 문제들을 DAO 또는 Mapper가 아닌 테이
앞선 게시글에선 ORM에 대해 알아보았다. 그럼 ORM의 특징인 객체와 DB를 매핑한다고 하였는데 그중 하나인 Raw JPA에 대해 알아보자.우선 시작하기 앞서 간혹 헷갈리는 도메인(Domain)에 대해 짚고 넘어가보자.도메인의 정의 : 컴퓨터 프로그래밍 분야에서 문제
이번 챌린지 과제는 이미지 업로드 기능 구현으로 S3를 활용한 이미지 업로드 기능을 구현해보자.AWS의 S3 버킷생성과 IAM 엑세스,시크릿키 발급에 관해선 구글검색을 통해 쉽게 접할수 있으니 본 게시글에서는 다루지 않고 버킷생성과 키 발급이 완료된 후 부터 시작해보자
최종 프로젝트 앞서 심화주간에 공부한것들과 기존의 공부한것들로 Trello와 같은 협업도구를 만드는 팀프로젝트가 발제되었다.우선 여러번의 팀프로젝트가 진행되면서 코드나 깃의 컨벤션이 정해져있지않아 코드의 생산성이 저하되는 문제가 여러차례 발생하여 이번에는 팀프로젝트 S
로컬에서 구현이 끝난 서버를 AWS의 EC2, RDS, ElasticCache(Redis)를 사용하여 배포해보자!EC2, RDS, ElasticCache에 관한 생성 및 설정은 생략하고 시작해보겠다.우선 서버를 EC2에 올리기전에 로컬에서 RDS와 연결하여 테스트를 해
코드 컨벤션 통일을 함으로써 코드 통일성을 확보하여 가독성을 높혀서 좋았습니다. 컨벤션 덕분에 통합하기에 어려움이 적었습니다. 상황 간 메서드명을 규칙을 정함으로 써, 메서드를 활용해야 할 때 예상이 가능해서 좋았습니다. 코드 리뷰 깃허브의 적
최종 프로젝트를 기획하면서 팀원들과 함께 기획단계에서 최대한 치밀하게 설계할려고 노력하였다.프로젝트 명 : 함께해조소개한 줄 정리 : 취미를 공유하고 함께 즐길 수 있는 모임을 만들거나 가입 할 수 있는 사이트기획 배경 : 대 모임 보다는 자신과 관심사가 맞는 사람들
맡고 있던 로그인, 로그아웃기능을 비롯한 Spring Security 인증, 인가 로직 구현 후 withUs의 실시간 채팅 기능 구현을 진행하였다.실시간 채팅기능은 앞선 수강한 강의나 프로젝트에서는 다뤄지지않는 기능으로 도전적인 과제였지만 클럽의 호스트와 게스트의 원활
유저 테스트 도중 다중로그인이 가능하다는 피드백을 받게되었다. 본 프로젝트에서 채택한 Token 방식의 Stateless 특성으로 인해 기존에 발급한 토큰을 임의로 무효화 등의 조작이 불가능하기 때문에(Token의 한계점) 여러 브라우저에서 동시에 로그인하여 토큰을 발
모임의 호스트와 게스트간의 의사소통을 위해 채팅기능을 구현 Http