그 외 공부

멀티모듈 프로젝트를 구성하기 위해 프로젝트 패키지 루트 경로의 settings.gradle 파일에 각 프로젝트 디렉토리를 설정해줘야했다. 내가 만든 구조는 아래와 같았다. - boot - api-server - batch - kafka - core - domain - persistence 루트 패키지를 기준으로 쭉쭉 모듈들이 존재하는게 아니라 성격이 비슷한 모듈들을 하나의 디렉토리 내에 모아놓은 형태였다. 루트 패키지 내에 바로 존재하는 모듈을 include해주기 위해선 include 'foo' 처럼 해주므로, 느낌상 특정 디렉토리 하위에 있는 프로젝트는 include 'foo:bar' 처럼 해주면 될 것 같았다. 그래서 아래와 같이 설정했다. // settings.gradle rootProject.n..
메일 서버 동작 구조 메일이 송신자를 떠나 최종 수신자에게 도달하는 대략적인 구조는 위 그림과 같다. 먼저, 송신자는 메일 송신 프로토콜인 SMTP를 통해 메일 데이터를 메일 발신 서버인 abc.com에 전송한다. 메일을 받은 abc.com은 메일 데이터에 포함된 수신자의 메일 서버의 IP를 DNS를 통해 조회하고, 동일하게 SMTP를 사용해 데이터를 해당 서버에 전송한다. 이렇게 전송된 데이터는 메일 수신 프로토콜인 POP3 혹은 IMAP를 사용해 최종 수신자에게 전달된다. 메일 송수신에 사용되는 프로토콜 1) SMTP (Simple Mail Transfer Protocol) 메일 송신을 위해 사용되는 프로토콜 사용 케이스 메일을 송신하고자 하는 사용자가 MTA(Mail Transfer Agent)를 ..
문제 상황 엔티티의 속성을 수정, 저장 후 수정사항이 반영되었는지 확인하기 위해 재조회할 때 변경 내용이 반영되지 않은 채로 데이터가 조회되는 상황이 발생했다. 보다 구체적을 설명하면, 엔티티를 Soft delete하고 난 후 Repository를 통해 다시 해당 객체를 조회했을 때, 조회가 되지 않도록 @Where 처리를 해놓았으나, 실제론 해당 데이터가 여전히 조회됐다. // Book 엔티티 @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Where(clause = "state != 'DELETED'") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDEN..
문제 상황 스프링 + JPA에 MySQL을 연결해 사용하는 상황에서 “Group”이라는 엔티티를 정의한 후, yml 파일의 jpa.hibernate.ddl-auto 설정을 create로 하여 엔티티 정보에 따라 테이블을 jpa가 자동으로 생성하도록 처리해주었다. spring: jpa: hibernate: ddl-auto: create # 테이블 자동 생성 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect database: mysql 하지만 서버를 켰을 때, SQL syntax error로 인해 “group” 테이블을 생성하는데 실패했다는 메시지를 뿜으며 테이블이 제대로 생성되지 않았다. org.hibernate.tool.schema.spi.Com..
오늘 오전 미뤄놨던 MAC OS Monterey 업데이트를 한 후, 진행 중인 프로젝트의 로컬 서버를 가동하려는데 얘가 갑자기 가상환경에 설치된 패키지들을 읽어들이지 못했다. ModuleNotFoundError: No module named 'decouple' pip freeze를 해도 패키지를 읽어들이지 못했고, git도 정상적으로 작동하지 않았다. 아마 git이 작동하지 않으니 패키지들 또한 정상적으로 불리지 못하는 상황인 것 같았다. 자세히 보니 터미널에 xcrun: error: invalid active developer path 라는 에러가 찍혀있었고, 검색해본 결과 매번 OS 업데이트 직후 빈번히 발생하는 문제란다. 해결방법은 생각보다 간단했다. xcode-select --install 터미널..
CORS란? 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 출처(Origin): https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 교차 출처 리소스 공유 (CORS) - HTTP | MDN 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라 developer.mozilla.org..
Crontab? 크론탭은 특정 파일이 특정 시간에 정기적으로 실행될 수 있도록 도와주는 유틸이다. 매일 특정 시간에 실행시켜야 하는 파일이 있다면 크론탭을 통해 서버에 올려놓고 사용하는 식이 대부분이다. 명령어 # 크론탭 작업 목록 crontab -l # 크론탭 수정 crontab -e # 크론탭 작성 내용 삭제 crontab -r 작성 크론탭을 사용할 때는 파일이름과 해당 파일이 동작할 시간을 함께 작성해준다. 아마 초기 작성시에는 사용할 편집기를 고르게 하는데 nano든 vim이든 본인이 편한 걸로 사용해주자. * * * * * /home/mydir/someFileToExecute.sh * 은 첫 번째부터 - 분 (0~59) - 시 (0~23) - 일 (1-31) - 월 (1~12) - 요일 (0~7..
링크드 리스트 정리 https://seongonion.tistory.com/20?category=867075 링크드 리스트의 구현 및 연산 - 파이썬(Python) 링크드 리스트의 구현 (Node, __init__, __str__) 링크드 리스트를 구현하기 위해선, 각각의 데이터와 다음 데이터에 대한 주소(레퍼런스)를 저장할 '노드' 객체가 필요하다. class Node: def __init__(self, data. seongonion.tistory.com 우선, 단방향 링크드 리스트를 클래스를 통해 간단히 구현해보자. class Node: def __init__(self, data): self.data = data self.next = None 각 노드들은 data와 next를 속성으로 가질 수 있다...
SeongOnion
'그 외 공부' 카테고리의 글 목록 (2 Page)