본문 바로가기

분류 전체보기56

CORS 문제 해결 과정 CORS 문제 해결 과정팀 프로젝트를 진행하면서 CORS 문제를 겪었다. 이번 포스팅에서는 이 문제를 어떻게 해결했는지 그 과정을 정리해보자.프로젝트 코드는 GitHub 링크를 통해서 확인할 수 있습니다.문제의 발단API를 구현하고 서버에 배포한 후, 프론트엔드 팀원에게서 CORS 문제가 발생했다는 메시지를 받았었다. 그 메시지를 처음 받았을 때는 조금 당황스러웠다. 프론트 팀원이 보내준 오류 메시지"지금 회원가입 API 요청을 보냈을 때 CORS 때문에 안되는 것 같아요. 설정이 어떻게 되어 있는지 확인해주실 수 있나요? 백엔드 API 주소는 배포된 주소인데 프론트에서 요청 보내는 주소가 localhost:3000이라 CORS 문제가 기본적으로 발생할 텐데요. 만약 설정이 제대로 되어 있다면 제가 뭔가.. 2024. 8. 9.
[item 25] 톱레벨 클래스는 한 파일에 하나만 담으라 이번 포스팅의 요약은 다음과 같다.1. 한 개의 파일에 한 개의 톱레벨 클래스만 둔다.2. (한 파일에 여러개를 두고 싶다면) 정적 멤버 클래스 방식을 사용한다.톱 레벨 클래스톱 레벨 클래스는 중첩 클래스가 아닌 클래스이다. 중첩 클래스는 "다른 클래스 안에 정의된 클래스"를 말한다. item 24 편에 정리해두었다.코드 코드를 통해 톱레벨 클래스에 대해 알아보자. 집기(Utensil)와 디저트(Dessert) 클래스가 Utensil.java라는 한 파일에 정의되어 있다, 그리고 Dessert.java 파일에도 집기, 디저트가 정의되어 있다. 무슨 문제가 발생할까?// Main.javapackage study.effectivejava.item25;public class Main { publi.. 2024. 6. 17.
[item 28] 배열보다는 리스트를 사용하라 배열보다는 리스트를 사용하라배열과 제네릭 차이 1배열배열은 공변이다. (함께 변한다는 뜻이다.)Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다.제네릭불공변이다.즉, 서로 다른 타입 Type1과 Type2가 있을 때, List은 List의 하위 타입도 아니고 상위 타입도 아니다.이것만 보면, 제네릭에 문제가 있다고 생각할 수도 있지만, 사실 문제가 있는 건 배열 쪽이다. 아래 코드를 보자. 배열 예시코드 : 런타임에 실패한다. 위 코드는 컴파일 단계에서는 문제가 없지만 런타임 단계에서 문제가 발생한다. 제네릭 예시코드 : 컴파일되지 않는다.List를 사용하면, 컴파일 단계에서 문제를 알 수 있게 된다.배열과 제네릭 차이 2배열배열은 실체화(reify)된다.배열.. 2024. 5. 31.
[item 27] 비 검사 경고를 제거하라 비 검사 경고를 제거하라제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것이다.비검사 형변환 경고비검사 메서드 호출 경고비검사 매개변수화 가변인수 타입 경고비검사 변환 경고그리고, 새로 작성한 코드가 한번에 깨끗하게 컴파일되리라 기대하지는 말자. 대부분의 비검사 경고는 쉽게 제거할 수 있다. 컴파일러가 알려준 잘못된 코드를 수정하면 경고가 사라진다.JAVA 7부터 지원하는 다이아몬드 연산자()만으로 해결할 수 있다. java Set exaltation = new HashSet();할 수 있는 한 모든 비검사 경고를 제거하라모두 제거하면 타입 안정성이 보장된다. 런타임에 ClassCastException이 발생할 일이 없고, 내가 의도한대로 잘 동작한다.@SuppressWarnings("unch.. 2024. 5. 31.