실전 프로젝트-이룸(E-room)
📕📚실전 프로젝트 회고록- 이룸 📌 최종발표회(3/11 마무리) 실전프로젝트-BE 깃허브 주소 📌 피드백 최종발표회 때 받은 피드백과 질문 리스트 RDS 연결부분 트러블 슈팅이 발생한 이유 nginx에서 로드밸런싱을 도입한 전후 성능테스트 테스트 코드 작성 시 여러 예외 발생 시나리오가 있었다면 ...
📕📚실전 프로젝트 회고록- 이룸 📌 최종발표회(3/11 마무리) 실전프로젝트-BE 깃허브 주소 📌 피드백 최종발표회 때 받은 피드백과 질문 리스트 RDS 연결부분 트러블 슈팅이 발생한 이유 nginx에서 로드밸런싱을 도입한 전후 성능테스트 테스트 코드 작성 시 여러 예외 발생 시나리오가 있었다면 ...
WebSocket STOMP 채팅 개별 삭제 트러블슈팅 java.lang.ClassCastException 삭제한 사용자만 업데이트 되는 현상 채팅메세지 개별 삭제기능 전체 코드 [1] java.lang.ClassCastException java.lang.ClassCastException은 캐스팅 예외가 ...
Redis에 TTL(Time-To-Live) 설정 Redis에 이전 채팅 내역을 저장하다 보면 점점 쌓이는 데이터가 많고 그대로 두면 CPU가 넘친다 프론트단이랑 30일을 채팅 메시지 보관 기간으로 설정했기 때문에 기간이 지난 내역은 서버에서 삭제 되도록 구현해야 한다 이전에는 수동으로 Redis 저장된 정보를 클러스터...
Redis 설치 및 연결 확인 ElasticCache for Redis 인스턴스 생성하기 EC2 인스턴스에서 ElasticCache 실행하기 Spring으로 ElasticCache for Redis 사용하기 Redis 연결 확인 [1] ElasticCache for Redis 인스턴스 생성하기 1. Red...
Redis 직렬화/역직렬화 이슈 채팅 메시지를 Redis에 저장하는 동안 “SerializationException”이 발생 Redis에 Java 8의 LocalDateTime을 저장하려고 할 때 발생하는 문제인데 처리할 수 있는 모듈이 필요하다라는 뜻 ! 2024-02-29T07:42:08.065Z ERROR 1 --- [boundCha...
Redis 적용하여 이전 채팅 내역 저장 및 전송 현 프로젝트에 채팅 내역을 저장하려면 다음과 같은 방법으로 구현해야 한다 클라이언트에서 채팅 메시지가 생성되면 해당 메시지를 Redis의 List에 저장하고 각 채팅방은 별도의 List로 관리 한다. 채팅방의 채팅 내역이 필요한 경우 해당 채팅방의 id를 key로 설정해 List에서 채팅...
DB가 RDS와 연결되지 않는 error Issue 엔드포인트:3306/RDS 생성시 DB이름 & USER & PASSWORD 제대로 입력했음에도 RDS와 DB 연결이 계속 실패 HTTP/HTTPS 배포시에는 DB연결에 아무 문제가 없었다 • 서버가 잘 실행되는 듯 했으나 Unknown database 오류가 계속발생...
트러블슈팅 AWS EC2, Github Actions, Docker, Nginx를 활용한 무중단 배포 시 에러 Trouble Shooting 1. ./gradlew 스크립트에 실행 권한이 없어서 발생하는 에러 gradle build 되기 전 권한을 부여하는 스크립트 작성해서 해결한다 # gradlew ...
리액트-스프링 통신 WebSocket STOMP 웹소켓이란? WebSocket VS HTTP 기술적 스택 결정 WebSocket API를 사용하는 방법 STOMP란? 웹소켓 위에 STOMP를 사용하는 이유 STOMP 동작 흐름 [1] 웹소켓이란? 서버와 클라이언트 사이에 양방향 통...
무중단 배포 구현하기 - (6) AWS 설정 무중단 배포 확인 트러블 슈팅 [15] AWS 설정 1. 인바운드 규칙 이 요청을 날리는 대상이 GitHubActions ubuntu ! 즉, 외부 서버이다. 외부 서버에서는 해당 8080, 8081 접속이 안된다 왜냐하면 EC2에서 포트 설정을 안해...
무중단 배포 구현하기 - (5) GitHub ACTIONS 워크플로우 생성 GitHub ACTIONS 워크플로우 작성 [13] GitHub ACTIONS 워크플로우 생성 Github의 Actions 탭 > set up a workflow yourself gradle.yml 생성 완료! [14...
무중단 배포 구현하기 - (4) 도커 컴포즈 파일 설정 -blue, green 도커파일 작성(Dockerfile) GitHub ACTIONS secrets 주입 GitHub ACTIONS 워크플로우 생성 GitHub ACTIONS 워크플로우 작성 [10] 도커 컴포즈 파일 설정 - blue, gree...
무중단 배포 구현하기 - (3) 스프링부트(Springboot) 프로젝트 설정 HealthCheck 컨트롤러 생성 application.yml 세팅 [7] 스프링부트(Springboot) 프로젝트 설정 스프링부트 gradle로 프로젝트 생성 및 진행한다 buid.gradle > 아래 코드 추가(bui...
무중단 배포 구현하기 - (2) Nginx 설치 Nginx 세팅 Nginx의 역할: 8080 blue 서버가 정상적으로 작동하고 있다면 green 서버를 켠다 green 서버가 정상적으로 작동하면 Nginx가 green 서버를 가리키게 되고 blue와의 연결을 끊고 서버를 중지한다 ...
무중단 배포 구현하기 - (1) AWS EC2 인스턴스 생성 및 접속 EC2 Ubuntu에 도커 설치(docker, docker-compose) 도커 허브 회원가입 후 토큰 발급 도커 데스크탑 설치 [1] AWS EC2 인스턴스 생성 및 접속- 완료한 상황 AWS에서 인스턴스 생성 완료한 상황 (ubu...
[1] JPA란? Java Persistence API의 약자로 자바가 제공하는 API이다 스프링에서 많이 사용하고 있지만 자바 APP에서 관계형 DB를 사용하는 방식을 정의한 인터페이스 직접 SQL 문을 작성하지 않고도 JPA API를 활용해서 간단하게 DB를 저장하고 관리할 수 있다 ORM 기술 표준으로 사용함 ORM(Object Rela...
TroubleShooting 어제부터 너무 힘들게 하는 “Doker 설치 후 DB 연결이 안되는 문제” 발생 … 차근차근 해결해보고 과정을 기록하고자 다시 글을 작성한다 HTTPS 배포 및 연결까지는 RDS 연결이 잘 됐다 CI/CD 구축하면서 Doker 설치 후 갑자기!!! DB 연결이 안되면서 서버도 자꾸 중단됐다 다행히 서버는 Ubunt...
오버로딩과 오버라이딩 오버로딩(Overloading) - 기존에 없던 새로운 메서드를 정의 하는 것(new) 오버라이딩(Overloading) - 상속받은 메서드의 내용을 변경하는 것(change, modifiy) 1. 오버로딩(Overloading) 사전적 의미는 과적하다, 즉 많이 싣는 것을 뜻한다 보통 하나의 메서드 이...
[1] Call by reference란 무엇인가? : 참조에 의한 호출 call by reference 방식은 함수 호출 시 변수의 메모리 주소를 전달한다 따라서 함수 내에서 변수 값이 변경되면, 아규먼트로 전달된 객체의 값도 변경된다 [2] Call by reference 쓰는 방법 아래와 같이 MyNumber라는 ...
Docker을 활용한 EC2 배포 배포 Flow 1. dockerfile을 작성한 후, 빌드하여 docker image를 생성. 2. docker image 파일을 docker hub에 push. 3. 서버(AWS EC2)에서 docker hub에 있는 docker image를 pull. 4. docker run 명령어로 doc...
Windows11에서 Doker 설치하기 [1] Windows Terminal 설치 Microsoft Store > Windows Terminal 다운로드 Microsoft 공식 홈페이지 [2] WSL2 설치 ‘Windows Terminal’ 앱을 관리자 권한으로 실행 (다음 명령어 실행) dism.exe /onli...
Github Actions과 Docker을 활용한 CI/CD 구축 [1] CI / CD 자동화 배포 전체 흐름 1. CI (Continuous Integration) 배포 새로운 코드 변경 사항을 주기적으로 1)빌드하고 2)기존 파일과 병합시 오류가 없는지 테스트를 완료한 후 3) 문제가 발생한 경우 다...
무중단 배포 기술 스택 도입 결정하기(2)- L4, L7 스위치, Nginx 무중단 배포 구현 방식에는 어떤 것이 있을까? 3. L4, L7 스위치를 이용한 무중단 배포 OSI 7계층중 각 4계층 7계층에서 동작한다는 의미인데 L4는 IP,Port 데이터, L7는 추가적으로 URL, HTTP HOST 정보까지 볼 수 있다 L4, L7 스위...
무중단 배포 기술 스택 도입 결정하기(1)- AWS Blue-Green, Docker 무중단 배포란 무중단 배포 도입이 필요한 이유 지금까지는 프로젝트를 생성 후 서비스를 Https로 배포 및 운영 중일 때 수정사항이 반영된 새로운 버전을 배포하기 위해서 항상 작동 중인 기존 서비스를 종료하고 새로운 서비스를 시작해야 했다...
React-Spring 통신, Jwt 토큰이 쿠키에서 undifined될 때 Issue Spring에서는 Jwt 토큰 생성과, 쿠키에 저장, 전달까지 완료된 상태 React에서 로그인 후 Jwt 토큰이 쿠키에 Authorization이름으로 저장되고 전달되지 않는 상황 undefined, name도 Authorization이 아닌 tok...
AWS CI/CD 구축을 통한 자동화 배포 완성하기 Issue AWS로 https 배포에 성공했지만 코드를 업그레이드 하고 매번 리눅스 환경해서 명령어 치는 시간이 꽤나 많이 소요가 됐다. POSTMAN으로 테스트 후 배포한 웹 브라우저에서 한 번 테스트 할 때마다 서버를 재작동 시키는 과정이 번거롭다. 개발자로서 코드에 집중할 수는 없...
[React-Spring 통신] Axios Response header의 값이 없는 경우 Issue React-Spring FE-BE 프로젝트에서 로그인/회원가입 API 기능 구현은 완료, 백엔단 배포도 완료된 상태 스프링 백엔단에서 https로 배포한 뒤에 jwt 토큰을 쿠키에 저장해서 보내는 방식을 jwt 토큰을 헤더에 담아서 전달하는 ...
Jsoup 라이브러리를 이용한 웹 크롤링 🔥Issue 1 뉴닉 이라는 웹사이트를 클론코딩하는 프로젝트를 FE-BE와 진행하면서 로그인/회원가입 구현 스켈레톤 코딩 후 메인페이지 CRUD와 웹 크롤링으로 자료를 띄우는 기능을 맡았다. 처음에 뉴닉 웹 사이트에서 웹 크롤링을 할 수 있을 줄 알고 코드를 거의 다 작성해가는데 문제가 발생했다...
AWS S3을 사용하여 데이터 저장 Issue : React-Spring 연동해서 Web 사이트를 만드는데 사진 데이터를 전송하고 받아야한다. 하지만 많은 사진 데이터를 다 서버에 저장할 수는 없다. 대량의 데이터를 안전하고 직관적으로 관리 할 수 있는 시스템 즉, 보관할 공간이 필요했다. 해결 방안 AWS S3를 사용해서 해결한다...
SpringBoot 백엔드 서버를 HTTPS로 배포하기 작업 환경(Window) HTTPS는 암호화된 HTTP프로토콜로서 양방향 안전하게 데이터 통신이 가능함 로그인/회원가입과 같이 security 관련 데이터들을 다루기 위해서는 HTTPS프로토콜이 필수적이다. 서버 또한 암호화된 ...
SpringBoot 백엔드 서버를 HTTP로 배포하기 사용환경(Window > git bash) AWS EC2 생성과 RDS 구매로 DB를 생성 및 연결 해놓은 상태 Step 1. RDS 구매하고 RDS 포트 열어주기 AWS -> RDS 접속 데이터베이스 생성 > 표준생성과 MySQL 선택 ...
깃허브 사용법 익히기 토이 프로젝트, 미니 프로젝트 진행하면서 완전히 git hub 사용을 겉핥기식으로 했었다면 이번에 팀원들이랑 pull/push 반복학습 하면서 이제야 내 입으로 직접 설명할 수 있을 정도로 익히게 되었다. git 용어 (clone, fork, branch, merge, pull request) [수정 작업 후] *...
20231224 🔥Fact (사실: 무슨 일이 있었나?) 자바의 정석 Chapter 01 ~ 02 읽고 ch.07 까지 실습 예제 따라하면서 진도 나감 페어 프로그래밍 경험 & 알고리즘 문제 풀기 스프링 강의 (주특기 주차 시작) 🔥Feeling (느낌: 무슨 느낌이 들었나?) 페어 프로그래밍이라는 것은 하나의 컴퓨터에서...
20231217 🔥Fact (사실: 무슨 일이 있었나?) 자바의 기본기가 너무 부족하다는 판단하에 자바 서적 구매 후 다시 처음부터 개념을 내 것으로 소화시켜야겠다고 결단 일주일 간의 해오던 무의미한 공부를 유의미하게 바뀌어야 할 때(깃블로그-> 나중에 내가 찾아보며 참고하고 이해할 수 있을 정도로 나의 언어로 작성해야한다) 🔥Fe...
20231215 🔥Fact (사실: 무슨 일이 있었나?) 코딩 테스트 10문제 풀기 기술 매니저님 멘토링 🔥Feeling (느낌: 무슨 느낌이 들었나?) 강의만 듣다가 알고리즘 문제 푸니까 재밌었다. 단계별로 문제를 풀었는데 앞에서 쓰면서 리마인드하고 배웠던 알고리즘을 적용하고 계속해서 더하고 업데이트 해서 문제를 푸는 방식이여...
20231214 🔥Fact (사실: 무슨 일이 있었나?) GitHub에 commit 하기 전 중요한 폴더를 삭제함 오랜만에 프로그래머스 코딩 테스트를 진행함 3-4주차 강의 들음 & 3주차 숙제 제출 기술 매니저님 멘토링 🔥Feeling (느낌: 무슨 느낌이 들었나?) 초반에 Git 사용법을 익히기도 힘들고 오류 뜨면 ...
20231213 🔥 Fact (사실: 무슨 일이 있었나?) 팀 프로젝트 과제를 진행함(깃블로그 작성(초기 구상)-> 코드작성 -> 수정 -> 코드작성 -> 수정 무한 반복) 🔥Feeling (느낌: 무슨 느낌이 들었나?) 생각보다 시간이 오래걸려서 너무 힘들었다. 끝까지 코드를 붙잡고 있는게 시간 낭비 같은 생각도...
인터페이스 인터페이스 역할 및 특징 두 객체를 연결해주는 다리 역할을 하며 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현한다 선언(접근 제어자도 지정 가능) public interface 인터페이스명 { } 모든 멤버변수는 public static final 이어야한다 public interface 인...
상속 final 과 static final final: 필드 타입 앞에 적음, 상수정의(한 번 저장 후 바꾸지 않을 때), 오버라이딩과 상속을 막음 static final: 클래스 내 단 하나의 상수(선언과 동시 초기화) 상수는 대문자로 적는 것이 관례 Getter 와 Setter 거의 모든 객체를 만들 때 필수적으로 들어감, ...
설계도(클래스) 클래스 설계 클래스 선언 -String 클래스명 객체 속성(=필드) 정의 고유데이터(변하지 않는), 상태 데이터(변할 수 있는), 객체 데이터(하위 객체로 둘 수 있는) 생성자(처음 객체가 생성될 때 어떤 로직, 어떤 값이 들어와야 하는지 정의) Public 클래스명 ...
객체 지향 프로그래밍 이해 캡슐화 속성 + 메서드 (올바른 메서드로 접근해야 변화 가능) 상속 속성과 메서드를 부모 객체 -> 자식 객체로 물려받아 사용 가능(코드 중복 줄어듦) 다형성 다양한 형태로 구현 가능 추상화 공통된 부분들을 모아 상위개념으로 새롭게 선언
1일 1커밋 20231213 ‘숫자 야구 프로그래밍 만들기’ 개인 목표: 최대한 강의에서 배운 내용을 활용하여 진행한다 To do 1. 컴퓨터가 0과 9사이의 서로 다른 숫자 3개를 무작위로 생성 random함수를 사용할 수 있지만 강의에서 나온 HashSet을 사용해보자 import java.util.HashSet; import...
여러 컬렉션들의 기능 컬랙션 특징: 다수의 참조형 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능 기능: 크기 자동조정/ 추가/ 수정/ 삭제/ 반복/ 순회/ 필터/ 포함확인 등 종류 데이터 집합 특징 예시 List 순서O, 중복O ...
배열, 다차원 배열, 컬렉션으로 연속된 데이터 저장 및 관리 배열 1차원 배열 선언 보통 타입 [] 변수 방식을 많이 사용한다 타입 [] 변수; 타입 변수[]; 1차원 배열 생성 배열을 생성할 때는 new 명령어로 생성하고 []안에는 배열의 크기를 설정한다 int[] intArray = new int[3]; // 초기값 {...
조건문과 반복문 조건문 : 특정 조건에 따라 연산을 수행하고 싶을 때 쓰임 if (flag){ System.out.println("flag 값은 true") Objects.equals(좌,우) 두개의 값을 비교하는 메소드, 좌 우가 같은 경우에는 true, 다른 경우 false switch/case문 switch(피연산자) ...
다양한 연산자 연산자 종류 예시 산술 연산자 + - * / % << >> 비교 연산자 > < >= <= == != 논리 연산자 &&a...
20231212 🔥 Fact (사실: 무슨 일이 있었나?) 깃 블로그 고유주소 변경 블로그를 제대로 시작하다보니 카테고리도 늘어나고 이에 해당하는 게시글 갯수도 점점 늘어나다보니 폴더로 정리 할 필요가 생겼다. 단순히 타이틀에 /폴더/제목/ 이렇게 생성하니 404 error 메세지가 떴다. 트러블슈팅: _co...
20231211 깃허브 사용법 익히기 1-2주차 강의 복습 & 내용 정리 기술 매니저님 멘토링 항해99 단기간 대비 성장 극대화 할 수 있는 방법들 고민 1. 깃허브 사용법 익히기 토이 프로젝트, 미니 프로젝트 진행하면서 완전히 git hub 사용을 겉핥기식으로 했었다면 이번에 팀원들이랑 pull/push 반복학습...
Java의 형변환 Double, Float to Int (실수 -> 정수 형변환) (int)를 변수 앞에 써준다 Int to Double, Float (정수 -> 실수 형변환) (Double) 또는 (Float)를 변수 앞에 써준다 숫자 → 문자 (형변환) int asciiNumber = sc.nextInt(); char ch = ...
Java의 데이터인 변수와 상수 변수: 변하는 저장공간 (객체, 문자, 숫자 저장 가능) 상수: 변하지 않는 저장공간 변수를 담는 저장공간의 종류와 사용법 변수 타입 논리형 변수: boolean boolean flag = true; // 논리형 변수 boolean 으로 선언 및 True 값으로 초기화 flag = false; //...
Java의 실행환경인 JVM에 대한 이해 Java 언어 처음에는 모의실험에서 실제환경과 유사한 가상환경을 컴퓨터에서 구현하려고 노력하다보니 객체 지향 언어가 탄생하게 되었다. 객체 지향의 포인트는 세계는 모든 객체(사물)로 이루어져 있고 그에 맞는 특징과 속성을 안다면 유기적으로 연결할 수 있다는 것이다. 우리가 기능별로 구현한 코드에 객...
20231210 1. 나의 개발 공부 올해 3월, 타 개발 부트캠프 커리큘럼에 참여해서 강의를 수강해보기도 하고 1일 1커밋 목표 스터디를 통해 코딩테스트와 깃허브를 그 당시 처음 접했다. 비전공자로서 개발자 준비 과정에 뛰어들긴 했지만 쏟아지는 과제와 테스트에 적응하기는 쉽지 않았다. 무엇보다 그것을 ‘혼자서’ 해내는 건 열정만으로는 부족했다....
Mini Project Essay Team Time Table 본 과정 시작하기 전에 조원들이랑 스터디 그라운드 룰을 정한다 매일 9시 출석체크 후 각자 할 일 브리핑 12시 30분까지 각자 할 일 진행 (카메라 켜두고) 12시 30분 오전 한 일 브리핑 1시~2시 점심시간 2시 오후 할 일 브리핑 5시 30분까지 각자 할 일...
Form 사용자가 입력한 데이터를 서버로 보낼 수 있다 처리할 곳을 url_for('데이터를 보낼 곳')으로 적고 방식을 GET과 POST 중에 사용한다 <form action="" method="GET"> <div class="mb-3"> GET(검색,조회), POST(로그인 등 정보 수정, 중요한 정보 저장...
라우팅 연습 주소에 따라 html 파일이 보여질 수 있도록 처리함. from flask import Flask, render_template app = Flask(__name__) @app.route("/") def home(): return render_template("home.html") @app.route("/page/") ...
Python 프로그래밍 언어 IF 조건문(조건이 참(True), 거짓(False) 중 하나를 만족할 때 실행되는 파이썬 문법) if 조건1: # 조건1이 참일 때 실행할 코드 elif 조건2: # 조건1이 거짓이고 조건2가 참일 때 실행할 코드 elif 조건3: # 조건1과 조건2가 모두 거짓이고 조건3이 참일 ...
JavaScript & jQuery JavaScript & jQuery(미리 완성된 JavaScript 코드) 코드가 복잡하고 브라우저 간 호환성 문제도 고려해야 해서 jQuery라는 라이브러리가 생김 쓰기 전에 import 해야 함. jQuery jQuery CDN 부분을 참고해서 임포트하기( <head>...
HTML은 뼈대, CSS는 꾸미기! HTML <head> 태그와 <body>태그로 구성된다 ( ! + Enter 키를 누르면 자동 완성됨) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <...
팀 프로젝트를 위한 Organization 만들기 Organization이란? FE, BE 협업 프로젝트처럼 여러명이 같은 프로젝트를 관리할 때 유용한 GitHub 그룹 계정이다. 프로젝트 카테고리 / 그룹화 하기 좋 먼저 GitHub에 접속 후 로그인 > 우측 상단에 나의 계정 > Your Organizations...
클론코딩 프로젝트-뉴닉 뉴닉 사이트 순서도 그려보기 뉴닉 ERD 그려보기 노션 페이지 [메인페이지 CRUD & 웹 크롤링] Jsoup 라이브러리 사용해서 웹 크롤링을 진행할 때 200 created가 뜨지만 DB에 저장되지 않는 현상 → “웹 사이트/robots.txt” 페이지에 User-agent: * Disallow: ...