목록전체 글 (25)
지석이의 일기
이번에 세미 프로젝트용으로 채팅을 구현하기로 했다. 서버는 Spring boot , 프론트는 React 로 구성했다. 채팅 기술스택은 websocket 을 사용하려고 한다. WebSocket의 기본 원리 WebSocket 프로토콜은 ws (또는 보안 연결을 위한 wss) 스키마를 사용하여 작동. 클라이언트(보통 웹 브라우저)는 WebSocket 객체를 생성하여 서버에 연결을 시도한다. 이 연결 과정은 HTTP 프로토콜을 사용하여 시작되며, Upgrade 헤더를 통해 WebSocket 연결로 전환. 연결 과정 핸드셰이크 요청: 클라이언트는 서버로 HTTP 요청. 이 요청에는 Upgrade: websocket과 Connection: Upgrade 헤더가 포함되어 WebSocket 연결로의 전환을 요청. 핸드..
이 저번에 react 프로젝트를 만드는 방법을 포스팅했었다. https://jisoekdays.tistory.com/24 이번에는 그 프로젝트를 서버에 올려서 다른 사람들도 접속할수있도록 구현을 하고 싶다. 현재 팀 사이드 프로젝트를 진행중이다. 그래서 msa 아키텍처를 다음과 같이 구성했다. 서버는 ec2 서버 2개를 받아서 FrontEnd 와 BackEnd 2개를 구현할 예정이다. 만일 AWS 서버 호스팅 방법에 대해서 궁금하면 https://jisoekdays.tistory.com/2 여기서 확인하자. React는 단순 정적 프로젝트로서, nginx에서 호출시킬 예정이다. 통상 S3 + CloudFront를 받아 배포시키지만, 나는 Web서버에 다른 기능들도 넣을 예정이라 ec2를 받아 위와 같이 ..
메타 데이터를 수정하는 과정에 다른 아이디 계정으로 수정하고 톰캣을 부팅하면서 뭔가 꼬인듯하다... 구글링 검색 결과 tomcat 디렉터리에 work를 삭제하고 재부팅하면 된다고 한다. sudo rm -rf work 로 work 디렉토리를 삭제하고 톰캣을 재부팅 하니 정상적으로 구동된다.
어느날 갑자기 홈페이지에서 타임 오버 에러가 났다. 부랴부랴 서버에 가서 nginx와 tomcat 을 재기동 해봤지만 여전히 에러가 났다. 혹시나 싶어 클라우드 방화벽까지 전부다 off를 시켜봤지만 여전히 되지 않는다. 지금부터 모든 과정을 다 정독했고, 풀이로 가보겠다. 트래픽이 1번째로 만나는 방화벽은 클라우드 방화벽이다. 통상 클라우드 서버를 호스팅하면 클라우드 방화벽이라 하여, 인바운드(inbound) 아웃바운드( outbound)를 설정하게 된다. 여기서 http(80) https(443) 22(sftp)등등을 오픈한다. 1번이 정상적으로 통과 됬는지(클라우드 서버를 못믿어서), 확인하려면 tcpdump를 사용해보면 된다. sudo tcpdump -i eth0 tcp port 80 를 하게 되면..
구동 에러가발생했고, 난 뭐 수정한것도 없는데 말이다.. 인터넷 검색결과 WAS 재기동 과정중에 수많은 요청이 오면 WAS처리가 안되어 에러가 난다? 라는 결과로 다음과 같이 처리했다. 1. 80TCP 삭제 후 재기동 sudo fuser -k 80/tcp sudo systemctl restart nginx fuser 가 없으면 yum -y install psmisc 로 설치해주자. 80포트가 현재 리스닝 중이라 구동에 안된다는건줄알았다. 대부분의 경우 여기서 해결된다는데... 나는 그것이 아니였고 여러 삽질결과 2. SELinux(보안 강화 Linux) 설정 getenforce 이 명령어의 결과가 'Enforcing'라면 SELinux가 활성화된 상태. 이 경우, 임시적으로 SELinux를 비활성화하고 ..
Java에서 JWT를 이용하여 Access Token과 Refresh Token을 발행하고, API 요청 시 토큰의 유효성을 검사하는 방법에 대해 알아보겠습니다. 의존성 추가 먼저 'jjwt' 라이브러리를 사용하기 위해 다음의 의존성을 Maven 프로젝트에 추가해야 합니다. io.jsonwebtoken jjwt 0.9.1 Access Token과 Refresh Token 발행 다음은 JWT를 이용하여 Access Token과 Refresh Token을 발행하는 Java 코드입니다. import io.jsonwebtoken.*; import java.util.Date; public class JwtExample { private static final String SECRET_KEY = "SecretKey..
Interceptor에서 토큰 유효성 체크 도중에 유효하지 않은 데이터를 반환 할때, 에러를 throw해야하는 경우가 있습니다. 그때, @ControllerAdvice를 이용해 Spring Boot에서 전역 예외 처리를 하는 방법에 대해 알아보겠습니다. 먼저, 사용자 정의 예외 클래스를 만들어보겠습니다. @Data @ToString public class CustomException extends RuntimeException { private String message; private String code; private String returnUrl; public CustomException(String message, String code , String returnUrl) { this.code =..
Redis를 CentOS 서버에 설치하고 Spring Boot에서 사용하기 안녕하세요, 오늘은 CentOS 서버에 Redis를 설치하고, Spring Boot 애플리케이션에서 이를 사용하는 방법에 대해 알아보겠습니다. CentOS 서버에 Redis 설치하기 먼저, CentOS에서 추가 패키지를 설치할 수 있는 EPEL(Extra Packages for Enterprise Linux) 저장소를 설치합니다. sudo yum install epel-release EPEL 저장소를 설치한 후, Redis를 설치합니다. sudo yum install redis 설치가 완료되면, Redis 서비스를 시작합니다. sudo systemctl start redis Redis가 정상적으로 작동하는지 확인합니다. redis..
간단한 프로젝트를 테스트 하기 위해 DB를 설치하고 설정하기가 여간 귀찮지 않을 수 없다. 물론 추후에 배울 도커를 사용한다면 바로 DB환경을 만들 수 있겠지만, 그건 또 서버가 있어야 가능한 소리이다. 그래서 바로 설정이 가능한 H2 데이터 베이스를 사용 하자. H2 데이터 베이스는 간단하게 말하자면 내가 지금 작동중인 프로젝트 메모리 안에 작은 경량 DB를 만들어 그 안에서 사용하는것이다. 그러므로 매우 가볍고(경량화), 매우 빠르고(고성능) 라는 장점이 있다. 물론 단점으론, 큰 프로젝트에는 사용하지 못하고, 일관성이 유지 되기 힘들다는 점이 있다고 한다. 그러므로 테스트로만 사용하고 실질적인 프로젝트에는 다른 DBMS를 사용하자! 아래는 인터넷에서 찾아 검색한 H2의 장단점 요약이다. 장점: 경량..
아래의 Person 클래스를 이용해서 아래 17개의 구문을 Stream API로 구현하면 되겠다. class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } 1.나이가 20세 이상인 사람들만 필터링하여 새로운 리스트를 만드세요. 2.모든 사람의 나이 합계를 구하세요. 3.이름에 '5'가 포함된 사람을 찾으세요. 만약 없다면 적절한 처리를 하세요. 4.사람들을 나이 순으로 정렬한 새로운 리스트를 만드세요. 5.각 사람의 이름 길이를 담은 리스트를 만드세요. 6.가장 나이가 많은 사람을 찾으세요. 만약 동일한 나이가 있다면 그 중 아무나 한..