서버개발

    GraalVM 소개

    GraalVM이란 GraalVM은 Java 코드를 작성하고 실행할 수 있는 도구 - 더 빠르고 유지하기 쉬운 컴파일러 작성 ex)트위터 : Scala 코드의 성능 향상 - JVM에서 실행되는 언어의 성능 향상 - 애플리케이션 시작 시간 단축 - Java 에코 시스템에 다국어 지원 통합 구성요소 - 고성능 최적화 Just-In-Time 컴파일러 : JVM 기반 어플리케이션을 기본적으로 실행 가능한 바이너리로 컴파일하는데 사용 - 네이티브 실행 파일을 빌드하기 위한 Ahead-of-Time 컴파일러 - 다국어 지원 : 프로그래밍 언어 인터프리터를 제공, 이를 이용해 GraalVM을 확장하여 Java 에코 시스템에 언어 추가 Just-In-Time(JIT) 컴파일러란 - 프로그램을 실제 실행하는 시점에 기계어..

    백엔드 기술 면접 대비(HTTP, JAVA, Spring, JPA 등)

    면접대비 자바 백엔드 공부하면 좋은 리스트 HTTP, JAVA, Spring, JPA, NoSQL, DB, 인증, MSA, Kotlin 등 HTTP HTTP에 대해 아는 대로 설명 HTTP의 특징 Stateless란 HTTP 요청 메서드들 GET vs POST GET은 쿼리스트링으로 조회되기 때문에 보안상으로 좋지 않다 POST는 데이터가 헤더가 아니라 바디에 있지만 GET보다 보안에 강하진 않다. 피들러?같은걸 사용하면 바디를 조작할 수 있다. 보안 관련된 것을 얘기할 때는 POST는 바디에 담겨있어서 보안에 강해보이지만, 모두 조회가 가능하기 때문에 HTTPS를 통해서 암호화로 서버에 던지는 것이 필요하다. PUT vs PATCH 상태코드들(204, 401, 403) 버전 별로 구분 1.0 TCP기반..

    [Spring] WebSocketConfig StompConfig SSL 설정 및 failover 설정

    AmazonMQ의 ActiveMQ를 이용해서 외부 브로커 설정을 하다보니 생기는 문제들이 조금 있었다. ssl 인증 때문에 되지 않는 오류가 있었고, active서버가 갑자기 내려가고 standby가 올라가면서 작동하여 배포 프로젝트에서 Stomp가 동작하지 않는 것이다. 일단 엔드포인트를 보면 웹 콘솔을 위한 클라이언트과 엔드포인트들 모두 ssl 인증이 필요하다. 그렇기 때문에 로컬에서 작업할 때와는 달리 SSL 처리를 해주어야 하고, active와 standby로 이중으로 구성되어 있는데 이 중 하나가 동작이 안될 시 다른 쪽으로 동작하게 된다. 하지만 stompconfig에는 아래의 failover:(~~)를 host로 설정해주었을 경우 동작하지 않기 때문에 별도의 설정을 해주어야한다. 일단 fai..

    [Github Actions] Github Secrets에 secret파일 등록(secret.yml 등)

    Github Secrets에 Secret파일 등록으로 CI/CD 깃허브에 올릴 때는 조심해야하는 파일들이 있는데 AWS, API 등에 접근할 수 있는 키를 가진 환경변수 등이 공유될 경우 큰 문제가 생길 수 있다. 그렇기 때문에 .gitignore를 이용해서 파일을 제외하는데 이렇게 되면 팀 프로젝트를 진행할 때 팀원에게 공유를 해야하는 문제도 발생할 뿐더러 이전에 구축해둔 GitAction을 이용한 CI/CD에서 해당 파일이 조회되지 않아 원활한 테스트가 이루어지지 않고, 배포 또한 오류로 중단된다. 이를 해결하기 위해서 여러 방법이 있지만 그 중 가장 간단해 보이는 Github Secret를 이용해서 secret파일을 등록하려고 한다. CI/CD를 구축한 뒤 진행한 것이므로 이전 글을 참고하기 바란다..

    [Docker] Docker 기본 명령어 및 스프링 어플리케이션 배포(기록용)

    이전 개인 프로젝트 도커화를 위한 기록용 linux환경에 docker 설치 sudo yum update sudo yum install docker-io y // y는 자동으로 대답해주는 옵션 docker version sudo systemctl start docker -> permissiondenied(sudo로 해결) // 권한 부여 sudo setfacl -m user:ec2-user:rw /var/run/docker.sock // 도커 이미지 목록 docker images // 도커 이미지 받아오기(버전 생략시 lastest가 붙은 버전을 가져온다) docker pull nginx // 도커 실행시 이름은 nginx로 포트는 도커와 클라이언트에서 둘다80 -d 백그라운드로 docker run --n..

    [AWS CI/CD]ubuntu22.04환경에서 CI/CD 구축하기(Nginx, GitAction, CodeDeploy)

    로컬 프로젝트 기본 세팅 # 프로젝트 최상단에 .github/workflows/gradle.yml 생성 - GitAction에 사용 될 코드로 추가해야한다. gradle 세팅이며, maven 코드는 다른 곳에서 새로 찾아야한다. 한글로 적힌 부분은 각 적합한 곳에서 추출해서 큰 따옴표를 지우고 치환하여야한다. - secrets.DEV_AWS_ACCESS_KEY_DEPLOY와 같은 secret.에 들어가있는 것은 github repository > Settings > Secrets에 추가하면 된다. 깃허브에서 깃액션으로 추가해도 되지만 깃랩을 사용해서 로컬에서 추가했다. # This workflow uses actions that are not certified by GitHub. # They are pr..

    [AWS] EC2 ALB 연결 후 503 Service Temporarily Unavailable

    배포한 EC2에 SSL를 이용하여 HTTPS를 적용하기 위해서 ALB를 만들고 타겟그룹을 지정해서 - 80포트로 접근 시 443으로 redirection - 443포트로 접근 시 80포트(타겟그룹 EC2 instance)으로 변경 후 서버 내에서 8080포트(Spring Application)로 포트포워딩 하도록 설계했다. 그런데 서버를 접속해보니 503 Service Temporarily Unavailable 에러가 발생하였다. 80포트로 접속했을 때 443으로 리다이렉션은 잘 수행되지만, 서버로는 연결이 되지 않았다. 타겟그룹의 모니터링을 살펴봐도 Unused로 사용기록이 없어 타겟그룹에 접속하지 못한다는 걸 알게되었다. 하루정도 시간이 걸렸고 서버 아키텍처를 조금 더 이해하고 나서야 원인을 찾을 수..

    [AWS] Ubuntu22.04 환경 EC2에서 스프링부트 런칭하기

    Ubuntu 환경 구축 기존에 AWS에서 Linux환경에서만 만들어보다가, Ubuntu 22.04 환경에서 만드니 큰 문제가 생겼다. 아무리 인바운드 규칙에 HTTP 포트(80)를 넣어도 ssh만 될 뿐, HTTP로는 접속이 되지 않는다..(curl, url 등등) 지속적으로 Connection refused가 뜨며, linux로만 만들었어서 큰 혼란에 빠졌다. AWS를 잘못 배운건지, user data를 안 넣어서 그런건지 security group을 잘못 지정했는지 몰라서 해결하는데 시간이 걸렸다..ㅠㅠ 일단 ubuntu에 들어오면 sudo apt-get upgrade를 진행한다 apt가 apt-get upgrade 방식으로 새로운 버젼에 대해서 알게되면, 장비에 존재하는 패키지의 새로운 버전을 fe..