본문 바로가기

Java 11

자바 스프링 CORS error 해결하기 안녕하세요. 오늘은 웹개발에서 빈번하게 발생하는, 괴발자들을 개롭히는 CrossOrigin 문제를 해결하는 방법을 알아보겠습니다. 요즘은 웹개발의 추세가 지금 공부하고 있는 프로젝트처럼 백엔드와 프론트엔드, 더하자면 데이터베이스까지 각각 별개로 배포하고 운영하는 MSA 아키텍쳐가 되다보니, 서버와 프론트의 포트 혹은 도메인이 달라 교차 출처 리소스 공유 에러가 개발자들을 괴롭히는 일이 많았습니다. (그렇다고 CORS 없는 웹 생태계를 상상하고 싶지는 않네요.. 지난 프로젝트에서 "요기요"사이트의 강력한 api를 슬쩍 사용해봤었는데, 오픈 api도 아닌 api가 이렇게 쉽게 찬탈 가능한 것은 상당히 보안에 취약해 보입니다.) 자바 스프링이라는 강력한 친구를 공부 중에 스프링에서는 이 문제를 어떻게 해결하고.. 2021. 11. 27.
스프링 프레임워크와 제어 역전, 의존성 주입 🍃-02 스프링 프레임워크의 핵심은 무엇일까? 누군가는 스프링 프레임워크의 핵심을 한 단어로 표현해 보라 한다면 주저 없이 의존성 주입(DI, Dependency Injection)을 말할 것이다. 의존성 주입은 IoC(Inversion of Control)와 함께 많이 언급되는데 IoC는 제어를 역전하는 것을 보편적으로 설명하는 단어이고, 의존성은 이러한 IoC를 디자인 패턴으로 구현하는 방법 중에 하나다. 의존성 주입 의존성 주입을 설명하기에 앞서서 의존성이 무엇이고, 왜 필요한지에 대해 이해해야 한다. 할 일을 기록하는 Todo 애플리케이션을 만든다고 하자. 자바를 주 언어로 사용하는 사람이라면 다음과 같은 코드에 익숙할 것이다. public class TodoService { private final Fi.. 2021. 11. 9.
IoC(제어 역전) / DI(의존성 주입) 개념 익히기 in Spring🍃 - 01 제어의 역전(Inversion of Control)이란 무엇일까? 제어의 역전, IoC(Inversion of Control)는 객체 지향 프로그래밍에서 역방향 제어를 지원하는 소프트웨어 설계 원리입니다. 여기서 통제는 일차적인 책임 외에 계급이 지어야 할 어떤 추가적인 책임입니다. 프로그램의 객체(Object) 또는 부분(Cokmponent)에 대한 제어권을 컨테이너나 프레임워크로 전송하는 소프트웨어 엔지니어링의 원칙입니다. 자바 프로그래밍에서는 객체 지향 프로그래밍의 맥락에서 가장 많이 사용합니다. 사용자 지정 코드가 라이브러리에 호출하는 기존 프로그래밍과 달리, IoC는 프레임워크가 프로그램 흐름을 제어하고 사용자 지정 코드를 호출할 수 있도록 합니다. 이 기능을 사용하기 위해 프레임워크는 추가적인.. 2021. 11. 8.
레이어드 아키텍처와 각 계층의 역할 레이어드 아키텍처 패턴은 어플리케이션을 구성하는 요소들을 수평적으로 나눠 관리하는 것이다. 수평적으로 나눴다는 것은 무슨 뜻일까? 간단히 말하면 이렇다. 위의 그림처럼 레이어로 나눠 놓은 것들을 하나의 클래스, 하나의 메소드 안에 전부 구현한다고 생각해 보자. // AllInOneController.java package com.sparta.springcore; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.sql.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Re.. 2021. 11. 8.
객체지향의 기본 다시 다지기 - 01 객체지향프로그래밍 (Object Oriented Programming)은 파이썬을 배울 때부터 지속적으로 자주 나타나는 개념인데, 이번에 한번 정리하고 넘어가보자. 자 우선 객체지향의 정의부터 알아보자. 객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 프로그램을 명령어, 코드의 뭉치로 보는 시각에서 벗어나서, 여러 개의 독립된 단위들의 모임, 그리고 그 사이에서 일어나는 현상과 작용에 대한 시각으로 옮겨가는.. 2021. 11. 8.
<JAVA> DTO가 뭐예요? 꼭 써야 하나요? 서비스가 요청을 처리하고 클라이언트에게 리턴할 때 처리한 모델 자체를 리턴하는 경우는 거의 없다. 보통은 데이터를 전달하는 데에 사용하는 오브젝트인 DTO(Data Transfer Object)로 변환해 리턴한다. 왜 귀찮게 이런 작업을 하는 것일까? 첫번째 이유 비즈니스로직의 캡슐화 ORM/JPA를 사용할 때 모델 하나하나는 데이터베이스의 테이블 구조와 매우 유사하다. 모델이 갖고 있는 필드들은 테이블의 스키마와 비슷한 확룰이 높다. 대부분의 비즈니스는 외부인이 자사의 데이터베이스의 스키마 형태를 아는 것을 원하지 않는다. 이때, DTO처럼 다른 오브젝트로 바꿔 반환하면 외부 사용자에게 서비스 내부의 로직, 데이터베이스의 구조 등을 숨길 수 있다. (방법: 멤버 변수는 private로 두고, publi.. 2021. 11. 8.
웹개발의 봄, 스프링 5주차 (최저가셀렉샵) [스파르타코딩클럽] 5주차는 지금까지 만든 나만의 셀렉샵 사이트와 스프링부트 서버를 아마존 AWS와 가비아 도메인을 통해 배포하는 내용이었다. 1. 아마존 RDS 구매하고 MySQL 세팅하기 2. html 웹페이지 메타 OG 태그 작업하기 3. 아마존 서버 EC2 구매하기 4. 도메인 구매 및 연결, EC2 셋팅하고 배포하기 AWS EC2란? 아마존 엘라스틱 컴퓨트 클라우드(Amazon Elastic Compute Cloud, EC2)는 아마존닷컴의 클라우드 컴퓨팅 플랫폼 아마존 웹 서비스의 중앙부를 이루며, 사용자가 가상 컴퓨터를 임대 받아 그 위에 자신만의 컴퓨터 애플리케이션들을 실행할 수 있게 합니다. EC2는 사용자가 아마존 머신 이미지(AMI)로 부팅하여 아마존이 “인스턴스”라 부르는 가상 머신을, 원하는 소프트웨.. 2021. 8. 19.
웹개발의 봄, 스프링 4주차 (최저가셀렉샵) [스파르타코딩클럽] 4주차에도 새로운 개념들을 많이 배웠다. 나만의 셀렉샵이라는 이름의 미니 프로젝트를 만들어보는 시간이었는데, 간단한 프로젝트지만 스프링의 중요한 요소들을 많이 다뤄주신 것 같아 정리 꼼꼼히 해둘 생각. 1. 3계층 아키텍처 어플리케이션을 3개의 논리적·물리적 컴퓨팅 계층으로 분리 구성하는 잘 정립된 소프트웨어 어플리케이션! (출처 IBM) 이 3개의 계층이란 프리젠테이션(클라이언트) 계층(JS,HTML,GUI 등 프론트엔드), 애플리케이션 계층(미들웨어, API), 데이터 계층(DBMS)으로 나눠지는데, 프리젠테이션 계층에서는 데이터 계층과 직접적으로 통신할 수 없고, 모든 통신은 애플리케이션 계층을 통과한다. 즉, 아래와 같은 형식으로 프로그램이 작동하는 모습인데, 적절한 분업을 통해 각각의 계층들이 .. 2021. 8. 18.
웹개발의 봄, 스프링 3주차 (24시간뉴스피드) [스파르타코딩클럽] 이번 주차는 메모의 CRUD를 구현하고 그것을 웹에 구현해, 24시간이 지나면 게시물(메모)이 저절로 사라지는 서비스를 만들었다. 스파르타코딩클럽의 왕초보시작반(웹개발 종합반1)을 들었던 사람이라면 내용이 파이썬의 Flask를 이용하는 것에서 자바의 Spring을 이용하는 것으로 바뀌었다고 생각하면 될 것 같다. 그래서 어떻게 보면 아는 사람한테는 별거 아닌 주차였고, HTML/CSS/JAVASCRIPT에 대한 기본기가 부족한 분들은 3주차가 의외로 길고 힘든 여정이 되었을 수도 있을 것 같다. 스프링 프레임워크는 RestController라는 것을 제공하는데 이게 진짜 편리하게 Get,Post,Put,Delete를 맵핑하는 어노테이션을 제공한다. 이...이게 다라고? 싶을 만큼 개발자는 크게 할 일이 .. 2021. 8. 16.
웹개발의 봄, 스프링 2주차 (내머리터짐) [스파르타코딩클럽] 이번주는 정말 아무것도 아닌 듯이 많은 개념을 배웠다 여기서 하나하나 정리를 해야 내꺼가 될 듯해서 여기에 정리를 좀 해봐야겠다. JPA: Java의 언어로 번역된 SQL 쿼리라고 생각하면 될 것 같다. 이를테면 H2(서버가 종료되면 데이터 역시 함께 휘발하는 간단한 SQL 도구)에 직접적으로 SQL문을 작성할 필요없이 리포지토리에 새로운 Person 인스턴스를 저장하면 INSERT INTO PERSON... 과 같은 SQL쿼리문으로 번역되어 실행, 해당 데이터가 데이터베이스에 저장된다. Repository: 데이터베이스(SQL DB)와 상응하는 클래스, 자바 안에서는 interface 형태로 구현하고 JpaRepository를 상속받아 사용한다. @Service: 아직 정확하게 "왜" 쓰는지는 잘 모르.. 2021. 8. 15.
웹개발의 봄, 스프링 1주차 (+자바) [스파르타코딩클럽] 리액트 수업을 마치고 호기롭게 시작한 자바, 파이썬과 자바스크립트 다음으로 사랑받는(?) 언어이기도 하고, 리액트네이티브로 앱을 만들 때도 작성은 모던 자바스크립트의 언어로 리액트네이티브라는 틀에 맞게 써냈지만 마지막에 빌드할 때에는 결국 자바, 그래들 같은 것들이 숨어있다가 나타나는 모습을 보고 언젠가는 자바를 배워야 할 거라고, 배우게 될 거라고 생각해왔는데 마침 좋은 기회(미니튜터라는 좋은 기회를 주신 황선애 매니저님 압도적 감사..!!)가 생겨 자바 스프링 강의를 스파르타코딩클럽을 통해 들을 수 있게 되었다. 불과 올해 3월까지만 하더라도, 프로그래밍 언어와 프레임워크 같은 개념도 모르고, 프로그래밍 언어에 어떤 것이 있는지도 몰라서, 자바와 자바스크립트가 비슷한 애들인 줄 알았던 (개발자들은 자.. 2021. 8. 12.