전체 글

전체 글

    간단한 자바 TCP 통신 구현

    TCP 연결 지향적 프로토콜 (1) 클라이언트가 연결 요청, 서버가 연결 수락하면 통신 선로 고정 (2) 통신 선로를 통해 데이터가 순차적으로 전달 ServerSocket과 Socket 자바는 java.net.ServerSocket과 java.net.Socket을 제공한다. ServerSocket은 클라이언트의 연결 요청 대기, 연결 수락 역할을 한다. Socket은 두 서버 간의 통신에서 데이터를 주고 받는 엔드포인트 역할을 한다. I/O Stream 통신이 연결되었다면 엔드포인트에서 데이터가 왔다갔다 한다. 자바에서 데이터는 Stream을 통해 이동한다. Stream은 단방향이므로 데이터 발신, 수신을 위한 Stream이 각각 필요하다. OutputStream 발신을 위한 스트림이며 바이트 기반 출력..

    자바 빌더 패턴 Java Builder Pattern

    무한 생성자 오버로드(overload) 이미 생성자 오버로드가 너무 많았고 나도 거기에 하나를 더 추가해야 하는 상황이 있었다. 생성자를 호출할 때 매개변수에 대한 정보를 알 수 없는 점이 너무 불편했고 코드도 쓸데없이 너무 길어졌다. // 예시 public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; public NutritionFacts() { this(0) } public NutritionFacts(int servingSize) { this(servingSize, 0) } public NutritionFact..

    JUnit은 JVM에서 돌아가는가?

    게슈탈트 붕괴 마냥 갑자기 JUnit은 JVM에서 돌아가는가? 하는 의문이 생겼다. 내가 JUnit에 대해 이미 알고 있는 내용은 자바 테스트를 하기 위해 JUnit라는 걸 쓴다 자바 언어로 작성한다 org.junit.. 어쩌구 등의 패키지가 있다 IDE를 통해 run 실행하거나 maven, gradle 등을 통해 test 실행한다 자바 코드를 테스트하기 위한 수단이며 그 자체가 자바와 긴밀하다는 건 알겠다. 그래서 JVM에서 돌아가는 건가? 1. JUnit은 유닛 테스트를 위한 자바 프레임워크다. 개발자가 테스트 코드를 만들면 프레임워크는 제어권을 가로채 주도적으로 실행한다. 나는 은연 중에 개발 코드와 테스트 코드를 별개로 생각하고 있었기에 저런 의문이 생겼던 것 같다. 그 둘은 별개가 아니라 같은 ..

    PostgreSQL 쿼리 무한 로딩 idle in transaction 해결

    한줄 요약: pid 조회하고 select pg_cancel_backend(pid);로 세션 취소 DROP INDEX 인덱스명; 을 실행했더니 무한 로딩이 걸린다. Oracle에서 update문을 실행하다가 고생한 경험을 떠올렸다. 네트워크 연결이 불안정한 작업 환경에서 운영 DB에 커밋을 하다가 무한 대기가 걸려서 아주 많이 당황했었고 lock이 원인이란 걸 파악한 뒤 DBA에게 session kill을 요청하여 해결했었다. 그러니 우선 현재 실행 중인 프로세스의 lock 정보를 보여주는 pg_locks view를 조회해보자. Lock 정보 조회 select * from pg_locks l, pg_stat_all_tables t where l.relation = t.relid order by relati..

    Spring Service단에 Interface가 필요한가?

    개인적으로 신규 프로젝트가 좋은 이유는 코드 구조를 바꿔볼 수 있기 때문이다. 기존 프로젝트의 코드를 리팩토링하기란 촉박한 일정에 맞춰 많은 기능을 구현해야 하는 업무 상황상 현실적으로 쉽지 않다. 이 기회를 노려 구조를 바꿔보던 중 Spring Service단에 Interface가 필요한가? 라는 질문을 받게 되었다. 1. 기존에 접하던 구조 Controller단에서 비즈니스 로직 처리 후 바로 DAO 호출하는 코드가 많음 즉 Controller단과 Service단의 분리가 되어있지 않음 특정 조건에 따라 데이터를 가공하는 로직을 이해하는데 시간이 너무 많이 소모된다 중복 로직이 생길 경우 코드는 미친듯이 늘어난다 이번 프로젝트에 REST API를 적용하게 되었고, 그 정신에 알맞게 Controller..

    4. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인

    0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동화 - Github Actions & AWS CodeDeploy 4. 정리 4. 정리 나는 업무 내용을 확장해서 개발 공부를 하는 편이다. 뭔가.. 버프를 받는 느낌이기 때문이다. 근데 이번 프로젝트를 하고 나니 미지의 기술도 학습해야 할 필요성을 체감했다. 시작할 때 막막했던 만큼 완성하면 성취감이 크다 물어볼 동료가 없으니 혼자 공식 문서, 사이트 엄청 뒤져보고 이거저거 해봐야 함 일할 땐 혹시 문제 생길까봐 조심하던 부분도 막 다룰 수 있다 막 다루면서 배우는 게 있음 새로 알게 된 지식이 주는 자극 0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동..

    3. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인

    0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동화 - Github Actions & AWS CodeDeploy 4. 정리 3. 배포 자동화 - Github Actions & AWS CodeDeploy AWS 공식 문서 한글화가 정말 잘되어있다. 웬만한 내용은 공식 문서에서 쉽게 찾아볼 수 있다. https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html Amazon EC2이란 무엇입니까? - Amazon Elastic Compute Cloud 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대..

    2. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인

    0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동화 - Github Actions & AWS CodeDeploy 4. 정리 2. AWS S3/EC2 AWS 공식 문서 한글화가 정말 잘되어있다. 웬만한 내용은 공식 문서에서 쉽게 찾아볼 수 있다. https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html Amazon EC2이란 무엇입니까? - Amazon Elastic Compute Cloud 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.co..

    1. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인

    0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동화 - Github Actions & AWS CodeDeploy 4. 정리 1. React & Spring Boot 구성 조건 React와 Spring Boot 분리 (1)스프링부트 안에 리액트를 종속시키는 구조와 (2)분리하는 구조가 있다. 물론 한 번에 전부 빌드가 되면 개발자 입장에서는 덜 귀찮을 수도 있다. 하지만 내가 사용자일 때 서비스의 서버가 터졌을 때 화면에서 "서버에 문제가 있다"라는 안내조차 없다면? (사실 개발하는 입장에서도 에러가 발생했을 때 화면이라도 뜨면 정말 기쁘다.) Spring Boot 외부 설정 파일 Profile 분리 저번 글에 언급했던 것처럼 외부 설정 파일 때문에 배포..

    0. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인

    사내 스터디로 AWS를 학습하게 되었다. 아래와 같은 이유로 프로젝트 주제와 기술을 선정하였다. 프론트와 백을 나눠보고 싶다 근데 A+B 조합은 많이 보이는데 A+C 조합은 잘 안 보인다 내가 해봐야겠다 배포 자동화가 얼마나 편한지 알고 싶다 클라우드도 써보고 싶다 좋은 튜토리얼은 많이 있으니 이 포스트에서는 헤매던 부분과 전체적인 흐름에 대해 공유하고자 한다. 나처럼 시작부터 막막함을 느끼는 사람들이 있다면 이 글이 도움이 되었으면 좋겠다. 0. 목표 및 구조 1. React & Spring Boot 2. AWS S3/EC2 3. 배포 자동화 - Github Actions & AWS CodeDeploy 4. 정리 0. 목표 및 구조 클라우드 환경 필요성 1. 특정 데이터를 테스트 DB에 당장 추가해야 ..

    AWS EC2 재부팅 시 스크립트 자동 실행(cloud-init)

    과금 폭탄이 무서워서(유사 경험 있음) 학습이 끝나면 반드시 인스턴스를 중지한다. 그러다 보니 인스턴스를 재부팅할 때마다 스프링부트 서비스를 수동으로 시작시켜줘야 한다. 귀찮다. 귀찮아서 배포 자동화를 했는데 말이다. 인스턴스에서 명령 실행 공식 문서를 찾아보니 인스턴스 시작 시 명령을 실행하는 방법이 있다. 자세히 보니 이 방법은 최초로 인스턴스를 시작할 때만 적용된다. 재시작할 때마다 명령을 실행하려면 별도의 구성을 해야 한다고 한다. 재부팅 시 명령 실행 인스턴스를 껐다 켰다 할 때마다 자동으로 스크립트를 실행하는 방법도 친절하게 설명되어 있다. mime 멀티파트 파일을 사용하여 cloud-init 패키지에서 사용자 데이터를 실행하는 빈도를 always로 설정해준다. https://aws.amazo..

    [JAVA] 메인메소드 public static void main(String[] args)에 대해

    public static void main(String[] args) java.exe로 JVM을 구동시키면 제일 먼저 main()메소드를 찾아서 실행시킨다.*그렇기 때문에 main메소드 이름을 바꾸면 안됨main()메소드를 프로그램 실행 진입점 entry point라 한다 1.public은 접근제어자. main에서 시작해 끝나므로 다른 곳에서 접근을 허용하지 않는다면 의미가 없기 때문에 public으로 지정한다 2.static은 프로그램이 시작하면서 따로 인스턴스 하지 않아도 static으로 선언된 것들은 메모리에 호출되서 프로그램이 종료되는 시점까지 계속 유지가 된다.다른 변수, 메소드, 클래스 경우 목적을 끝낸 후 JVM의 Garbage Collector에 의해 메모리에서 삭제된다. main 메소드가..

    [HTML/JS] Uncaught TypeError: is not a function 오류

    문제 html에는 아래의 코드를 썼고 1 cs js에 selectMonth라는 이름의 function을 만들었다. 근데 아래와 같은 오류가 발생했다. selectMonth is not a function at HTMLSelectElement.onchange 해결 html의 id 이름과 js의 function 이름을 겹치지 않게 바꿔줬더니 바로 작동이 되었다. 이름은 명확하게, 겹치지 않게 적어주자.