본문 바로가기
728x90

전체 글200

HTTP 401(Unauthorized), 403(Forbidden) 차이 HTTP 401(Unauthorized) vs 403(Forbidden) 차이 HTTP 상태 401(Unauthorized) 이란? HTTP 상태 중 401(Unauthorized)는 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부되었음을 의미하는 상태값이다. 즉, 클라이언트가 인증되지 않았기 때문에 요청을 정상적으로 처리할 수 없다고 알려주는 것이다. 401(Unauthorized) 응답을 받는 대표적인 경우는 로그인이 되어 있지 않은 상태에서 무언가 요청을 하는 경우이다. 예를 들어 어떤 쇼핑몰 사이트에 로그인을 하지 않았는데 나의 결제 내역과 같은 정보를 달라고 하면 401(Unauthorized)를 반환받게 될 것이다. 이와 많이 혼동되는 HTTP 상태로 403(Forbi.. 2022. 11. 7.
[MongoDB] MongoDB에 대하여 (NoSQL, BSON, MongoDB vs MySQL, MongoDB 사용법) NoSQL은 최대한 단순하면서 많은 데이터, RDBMS는 복잡하면서 무결성이 중요한 데이터에 적합하다고 생각한다. 1. NoSQL이란? Not Only SQL, SQL 뿐만 아니다라는 의미다. SQL을 사용하는 관계형 데이터베이스가 아닌 데이터베이스를 의미한다. 대표적인 관계형 데이터베이스로는 MySQL, Oracle, PostgreSQL이 있고 NoSQL 진영에는 MongoDB와 Redis 등이 있다. 포스팅의 주제인 MongoDB는, 다음 특징들을 가지고있다. 1-1. Document MongoDB는 정렬된 키와 연결된 값의 집합으로 이루어진 문서 지향 데이터 모델(Document DB)을 사용하는 데이터베이스 이다. 이러한 유형의 모델을 사용하면 정형 및 비정형 데이터를 보다 쉽고 빠르게 통합할 수.. 2022. 11. 4.
String 과 String Pool String은 Java 에서 제공하는 특별한 자료형이다. Java에서 String 객체를 생성하는 방법은 2가지가 있는데 첫번째는 String literal (큰 따옴표""를 사용하는 것), 두번째는 new 연산자를 사용하는 것이다. 두 방법에는 어떤 차이가 있을까? public class Main { public static void main(String[] args) { String s1 = "example"; String s2 = "example"; String ss1 = new String("example"); String ss2 = new String("example"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); Syst.. 2022. 11. 4.
[java] 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 [ 핵심 내용 ] JVM이란? JVM 구성 요소 바이트코드란, 바이너리 코드 컴파일 & 실행하는 방법 JIT 컴파일러란? JIT의 동작 JDK와 JRE의 차이 1. JVM이란? Java Virtual Machine 즉, 자바(j)를 실행하기 위한 가상 기계(vm). 자바 가상 머신으로 자바 바이트코드(.class 파일)를 컴퓨터가 이해할수 있는 바이너리 코드로 변환하여 실행한다. 1-2. 바이트 코드, 바이너리 코드 - 바이트코드 바이트 코드 0과 1로 구성되어 있는 이진 코드이지만 바이너리 코드와 다르게 가상 머신이 이해할 수 있는 코드 사람에게 더 친숙한 고급언어보다는 덜 추상적이지만 기계어보다는 추상적이다. 컴퓨터가 이해 할 수 있는 .. 2022. 11. 2.
[JPA] com.querydsl.core.types.ExpressionException:No constructor found for class - with parameters: [에러] com.querydsl.core.types.ExpressionException: No constructor found for class - with parameters:[]... QueryDsl을 이용해서 Entity 에서 전체 필드를 호출하는 것이 아니라, 특정 필드들만 호출하거나, 연관된 다른 Entity의 필드를 동시에 호출하고 싶다면 아래와 같이 Projections.constructor를 사용해야한다. [Repository] jpaQueryFactory .select(Projections.constructor(MemberDTO.class, member.email, order.orderDate, order.status ) ) .from(member) {...} [DTO] @Getter @.. 2022. 10. 29.
[Java] 가변인자(varargs, 쩜쩜쩜) 사용법 (매개변수 동적 사용) 가변인자란, 하나의 함수에서 매개변수를 동적으로 받을수 있는 방법. 메서드의 매개변수 개수를 동적으로 지정해주는 방법이다. '타입… 변수명' 형식으로 선언할 수 있고, 예시로 PrintStream Class의 printf()가 있다. public PrintStream printf(String format, Object ...args) { ... } 가변인자와 비슷한 방법으로 오버로딩이 있지만, 오버로딩은 다음과같이 함수 정의를 여러개 해야하고 public class test { public static void main(String[] args) { test t = new test(); t.variable("A"); t.variable("A","B"); t.variable("A","B","C"); } p.. 2022. 10. 25.
[SpringBoot] 스프링 controller에서 json 받기 (@RequestBody, @ResponseBody 어노테이션 사용) @RequestBody, @ResponseBody 어노테이션을 사용하여 컨트롤러에서 JSON 데이터를 주고받을 수 있다. api 요청 프로그램으로 사용한다면 Content-Type을 꼭 application/x-www-form-urlencoded 로 설정해주어야 한다. 1. @RequestBody로 JSON 정보 받기 JSON 형태의 정보를 Map과 커맨드 객체로 변환하기 위해 jackson 의존성 추가. implementation('org.springframework.boot:spring-boot-starter-web') 2. Ajax 간단한 페이지 작성 (home.jsp) Ajax 컨트롤러로 요청을 보낼 ajax 함수. JSON.stringify 함수를 이용하여 데이터를 보내고 contentType을.. 2022. 10. 25.
OSIV(Open Session in view)이란? 장단점, 써야할지 말아야할지 Open-In-View / Open-Session-In-View / Open-EntityManager-In-View 스프링부트 2.x 이상을 사용 중이라면 아래 경고를 한번 쯤 본 적 있을 것이다. 2022-10-21 15:19:29.799 WARN 45628 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 여기서 .. 2022. 10. 21.
[JPA] 컬렉션 조회(1대다 관계) 최적화 이번엔 저번 포스팅에 이어 주문 api XToMany 관계인 Order(주문)과 OrderItem(주문상품)에 대한 이야기다. XToOne의 경우 fetch join(left outer join)을 하면 성능 최적화가 되는데, XToMany 관계는 join하면 다(1:다) 측 데이터랑 물려서, 데이터가 뻥튀기(?)된다. 이 뻥튀기라는 말은 이따 코드로 볼 수 있겠지만, (예를들어 물건 3개를 산 하나의 주문내역을 확인 할 때, 1개의 결과가 나오는게 아니고 3개의 상품이 연결되어 있어서, 결과가 3개가 나와버리는 상황을 말한다.ㅜㅜ) 그래서 고려할게 많아진다. 일단 간단하게 코드를 살펴보자. 일단 처음에 짠 코드는 다음과 같았다. [Order] public class Order { {...} @OneTo.. 2022. 10. 14.
728x90