본문 바로가기

분류 전체보기510

[CS] 시스템 콜 시스템 콜은 운영체제가 커널에 접근하기 위한 인터페이스(추상화) 이다. 유저 프로그램이 운영체제의 서비스를 사용하기 위해서는 시스템 콜을 통해 해당 로직을 실행할 수 있다. 유저 프로그램에서 파일을 읽는 메서드(함수)를 실행시켰다고 생각해보자. 유저프로그램은 직접 파일 시스템에 접근할 수 없다. 유저 모드에서는 시스템 콜을 통해 커널모드로 들어가서 파일을 읽고 다시 시스템 콜을 통해 유저모드로 들어가 해당 메서드를 수행한다. 유저모드 : 유저가 접근할 수 있는 영역, 컴퓨터 자원에 침범하지 못한다. 커널모드 : 모든 컴퓨터 자원에 접근가능한 모드이다. 시스템콜을 통해 모드를 구분하지 않고 시스템에 접근이 가능하게 되면, 보안상 큰 문제가 발생할 수 있다. 이로인해, 파일 시스템은 외부에서의 접근에 보호받.. 2023. 1. 23.
Failed to load ApplicationContext 에러내용 onnection is broken: "java.net.ConnectException: Connection refused: no further information: localhost" [90067-214] Failed to load ApplicationContext 에러원인 RDS DB 를 사용하고 있는 서버와 분리하기 위해 테스트 서버를 H2 DB 로 분리하는 과정에서 발생한 에러 에러조치 적용하는 테스트코드 클래스에 아래의 코드를 적용하여 해결. H2 DB를 켜두지 않았거나, H2 와 MySQL 연결에 혼동이 생겨 발생한 에러라고 판단. 테스트 클래스에 H2 DB와 연결할 것을 명시해준다. @AutoConfigureTestDatabase(connection = EmbeddedDatabase.. 2023. 1. 22.
@ResponseStatus 와 ResponseEntity 차이점 프로젝트를 진행하면서 처음에는 ResponseEntity 로 전부 깔고 시작했다. 현 프로젝트에서는 "복잡성을 굳이 가져갈 필요 없다, 대중적으로 사용하지만 사용하지 않는(어울리지 않는) 것은 단순화 할 필요가 있다" 라는 생각이 들어 @ResponseStatus 로 리팩토링했다. 추상화 VS 커스터마이징 이 둘중에 하나를 사용해야 한다고 하면 그 상황에 맞는 선택이 필요하고 생각한다. 간편하게 빠르게 사용할 수 있는 추상화를 사용하고, 이후 리팩토링을 진행하거나 필요에 맞게 커스터마이징 할 수 있는 레벨로 변경하는 것이 좋은 방법이 아니지 않을까 생각한다. 정답은 없으니 프로젝트에 맞는 유연한 대처가 필요하다. @ResponseStatus 어노테이션은 HttpStatus 를 표현하는 방식 중 하나이다... 2023. 1. 21.
JAVA JDK17 을 사용하는 이유 나는 개인적으로 프로젝트를 시작하면서 17버전을 사용했다. 사실 내 프로젝트는 포트폴리오용 개인프로젝트로 8 , 11 과 같은 이전 버전을 사용해도 크게 문제가 없다. 신규 프로젝트에서는 고민없이? 선택할 수 있는 문제이겠지만, 이전 버전에서 마이그레이션 해야하는 상황이면 많은 고민이 있을 수도 있을것 같다.( 현 프로젝트에서 작동에 대한 보증이 필요할 경우 ) + 전자정부표준프레임워크를 사용하면 무조건 8 버전을 사용해야 한다고한다.. Java 17 버전은 2021년 9월에 공개된 LTS(Long-Term Support) 버전이며, 11과 비교해 70가지 이상의 JEP(JDK 개선제안) 가 더 추가되었다고 한다. 요즘 새롭게 나오는 강의나 유튜브에도 대부분 JDK 8 또는 11 버전을 사용하는 것을 볼.. 2023. 1. 21.
Springboot docker GitHub Action 연동하여 자동 배포하기 지난 번 로컬배포 및 ec2 배포에 이어서 GitHub Action 을 연동하려고 한다. ( nginx 사용 X ) cicd 경험이 없어서 테스트겸 테스트 해보려고 레포지토리를 만들어서 간단한 github action + s3 를 이용해보았다. https://github.com/dbswhd4932/cicdproject 환경변수도 없어서 금방 진행할 수 있었는데 프로젝트에 적용해보려고 하니 정말 많은 오류가 많았고 구글링을 해보아도 내 프로젝트랑 환경이 달라서 금방 적용할 수 없어 많은 시행착오를 겪었다. 먼저, 아주 간단히 플로우를 정리하면 아래와 같다. 1. 개발자가 코드를 main 브랜치에 푸시 ( PR 도 가능 ) 2. deploy.yml 에서 설정한 flow 대로 실행 3. gradle build.. 2023. 1. 20.
spring boot 빌드 시, 특정 테스트 제외하기 프로젝트를 배포하는 과정에서 build 할 때 테스트코드 실패로 인해 진행이 불가능할 때가 있다. 로컬에서는 이상없이 돌아가지만, 배포 시 문제가 된다. 이에 특정 테스트를 제외할 수 있는 방법이 있다. 나는 프로젝트에서 서비스레이어 테스트는 단위테스트(mock 사용) 을 하고 , 컨트롤러 테스트는 통합테스트 (springbootTest) 를 진행했다. 단위테스트는 mock 객체를 사용하므로, DB 의 내용과 관계가 없기 때문에 빌드할 때 포함해야 한다고 판단했고, 통합테스트는 DB 안에 있는 값으로 성공여부를 판단하기 때문에, 빌드시 제외해 주기로 했다. build.grade 에 아래의 코드를 추가하면된다. 해당 코드의 뜻은 ControllerTest 가 포함되어 있는 테스트는 제외한다는 뜻이다. 정규.. 2023. 1. 19.
RDS timezone Asia/Seoul 로 변경하기 Spring boot 와 RDS 를 연결한 후, 데이터를 입력했을 때 시스템 시간을 Asia/Seoul 로 변경하는 법을 알아본다. 설정하지 않으면 기본 디폴트값인 UTC 로 저장되어 보기가 어렵다 ( 아시아/서울 -9h 으로 지정되어있다 ) RDS 에서 파라미터 그룹을 생성해준다. 현재 사진상에 있는 timezone 을 만들어주는 과정이다. default 가 붙어있는 파라미터는 설정이 변경되지 않아 따로 만들어서 변경해주어야 한다. 유형은 DB 파라미터 그룹으로 한다. 그룹이름은 사용자가 원하는데로 작성한다. 생성된 timezone 을 누르고 설정을 변경해준다. 파라미터가 워낙많으니 time_zone 으로 검색하여 Asia/Seoul 로 변경한 후 변경 사항 저장을 한다. 변경이 완료되었으면 이제 사용.. 2023. 1. 19.
AWS Secrets Manager 설정하고 Spring boot 연동하기 프로젝트를 배포하려는 중 .ignore 한 파일에 대한 환경변수를 어떻게 처리해야할지 고민이 많았다. DB 접속정보도 중요하고, AWS S3 에 대한 access-key , secret-key 등 중요한 정보가 많았다. 개인프로젝트 배포를 Docker 와 ec2, github action 을 이용해서 했는데, 여러 블로그를 보니 properties 파일을 따로 만드는 코드를 작성해서 환경변수를 넣어주는 것 같았다. 이러한 중요한 정보를 키/값 으로 지원해주는 솔루션을 제공해주는 여러가지 방법이 있었다.키교체, 교차 계정 액세스 등 아직은 사용하지않지만.. 현업에서 더욱 많이 사용할 거라 생각해 선택했다.https://rainbound.tistory.com/entry/AWS-Parameter-Store-%.. 2023. 1. 19.
RDS MYSQL 연결 시 Connection time out 해결하기 RDS 연결을 하려고 여러 블로그들을 봤을 때 너무 간단해보였다. 다 동일한 과정이어서 호기롭게 도전했지만 Connection time out , unable to connect to localhost 에러에서 2시간이 넘게 걸렸다. RDS 를 몇번이나 삭제하고 새로 생성해도 같은 에러가 발생했으며, 보안그룹을 아무리 수정해도 똑같았다. 아래 해결방법을 공유하고자 한다. RDS 생성과정은 너무 많은 블로그가 있어서 생략하고 생성과정 중 꼭 확인해야할 것은 퍼블릭 액세스 여부를 "예" 로 설정해주어야 한다. 이후 아래 과정을 진행한다. aws -> vpc 로 들어가기 vpc 에 들어가면 라우팅 테이블 목록이 있다. 라우팅 테이블을 선택한다. 테이블 목록에서 RDS 와 연결되어 있는 것을 찾아야 한다. 아마.. 2023. 1. 17.