EU CRA 규제 본격화때문에 패키징 제품에 HTTPS를 도입해야 한다.nginx 기반으로 도입하고 싶은데 레퍼런스가 많이 부족하여 찾아본 내용을 정리하고자 한다. nginx 유료 검토✅ 무료nginx 오픈소스 완전 무료 (상용 이용 가능) nginx 대체제✅ 존재하지만 nginx가 best대안 Apache, Caddy, Traefiknginx 패키징 가능 프론트에서 nginx 인증서 전송❌ 불가능 및 금지웹 인터페이스로 개인키 전송은 EU CRA 위반EU CRA를 떠나서 애초에 하면 안되는 방식... MITM 우려대체 방법SSH 서버 접근certbot 자동 갱신고객사 내부 CA 연동 certbot 자동 갱신동작 원리고객사 서버 certbot 컨테이너 (무한 루프) ↓ 12시간마다 갱신 여부 ..
1️⃣ @Cacheable의 핵심 동작 방식Spring의 @Cacheable은 AOP 기반으로 동작한다. 즉, Spring이 만든 프록시 객체가 캐시 여부를 판단하고, 있으면 반환, 없으면 메서드 실행 및 캐싱을 진행한다. 주의사항은?@Servicepublic class FibonacciService { @Cacheable("fibonacci") public int fibonacci(int n) { if (n 같은 클래스 안에서 fibonacci(n - 1)처럼 자기 자신을 직접 호출하면, 프록시를 거치지 않기 때문에 @Cacheable이 동작하지 않는다. 결과적으로 O(2ⁿ) 재귀 호출이 그대로 실행되어, 캐시를 다는 의미가 사라진다. 위 코드에서 캐시를 적절히 사용하려면 아래와..
종강하고 작성하러 온 마지막 글... 아래는 이전에 작성한 EC2, CodeDeploy, S3 생성 및 세팅 글입니다. (1) EC2 인스턴스 생성 및 세팅(2) CodeDeploy 및 S3 세팅 GithubActions 연동에 들어가기 전 준비물!!!!!첫 번째 글에서 발급받은 사용자 액세스 키와 시크릿 키프로젝트 데이터베이스 스키마의 권한을 얻은 계정의 아이디와 비밀번호AWS S3 버킷 이름AWS CodeDeploy 애플리케이션 이름AWS CodeDeploy 애플리케이션 그룹 이름AWS EC2 인스턴스 이름위에 있는 것들을 미리 준비해 두면 스크립트를 작성할 때 수월합니다. 1. 프로젝트에 deploy.yml 파일 생성우선 프로젝트 최상단에 .github 폴더를 만들고 그 안에 workflo..
vmware 가상 서버에 공격자와 피공격자 서버, 그리고 에이전트 서버를 올려 공격을 테스트했다. 공격에 대응하는 내용도 담겨있다.처음에는 졸업 프로젝트 서버에다가 해볼까 했지만 곧 데모 발표라 불안해서 하지 않았다. 하지만 이제 대응 방법을 숙지했으니 기회만 되면 내가 운영하고 있는 서버를 공격해보고 싶다. 수행한 공격Smurf 공격Sloworis 공격 (Slow HTTP Header DoS)RUDY 공격 (Slow HTTP POST DoS)
@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Study { // ... @OneToMany( mappedBy = "study", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval = true ) private List images = new ArrayList(); // ... }위처럼 Study 엔티티에 선언되어 있었는데, List를 Images로 묶고 싶어졌다. 이때 Images는 List를 갖는 일급 컬렉션이다. 근데 엔티티 안에 일급 컬렉션을 넣는 경우는 처음이라 어떻게 해야 할지..
컨트롤러 응답을 이렇게 구현했다가 403 Forbidden이 발생해서 5시간 동안 삽질했다.더 부끄러운 건 로그를 제대로 안 봐서 이 사단이 만들어졌다는 거다.. 2024-05-23T01:55:58.686+09:00 WARN 60868 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]HttpMediaTypeNotAcceptableException라고 명시되어 있는데 응답이 403 Forbidden라 권한 문제로 착각 + WARN 경고여서 그냥 넘겼다... 이렇게..
한 명의 Member가 Account라는 객체를 가지도록 구현했는데 값 객체와 엔티티의 개념이 모호하여 정리하게 되었다. 아래는 기존 코드이다. 1️⃣ Member Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Valid @Embedded private Account account; @NotBlank private String nickname; private Role role; @Builder public Member(Account account, String nickname, Role role) { ..
닉네임 뒤에 난수 식별자 붙이는 기능을 구현하면서 늘 사용하던 Random 객체를 사용했다. 근데 어느 친절한 개발자 분께서 "Random 클래스"의 문제점이 뭐냐고 물어보셨다.네? Random class에 문제점이 있었나요? 바로 어떤 문제점이 있는지 찾아봤다. 1. 보안 Random 객체를 사용할 경우 생각보다 난수 같지 않은 난수를 얻는다(특징이 반복되는 난수들이 생성된다). 그래서 SecureRandom 객체를 사용해서 더 난수에 가까운 값을 만들 수 있다. 비교적 난수를 예측하기 쉬운 Random보다 SecureRandom 객체를 사용하는 것이 좋다. 라고 하면 좋겠지만 SecureRandom 객체 역시 사용하지 않는 게 좋다. 보안 목적을 떠나서 SecureRandom 객체 역시 Ra..