본문 바로가기
오이마켓 - 지역 기반 커뮤니티 웹 애플리케이션 당근 마켓 주요 기능 클론 코딩을 목적으로, 나와 가까운 위치에 있는 사람들과 소통하고, 실시간 대화를 할 수 있는 커뮤니티 개발 두번째 팀 프로젝트. Github Issues, Projects, Issue Template, Action 적극 활용. Java Spring boot, Spring Framework 구조 이해 및 학습 목적. DB: MySQL (AWS RDS) / Spring data JPA + JDBC 학습. 카카오톡 로그인 기능 구현과 JWT 토큰 기반 시큐리티 구현. 실시간 기능 위해 Spring websocket + SockJS, StompJS, Redis 사용 RESTful API, 꼼꼼한 ERD 설계의 중요성을 학습. Github Actions 활용하여 백엔드 부분은 Amazon .. 2021. 11. 30.
자바 스프링 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.
인증(Authentication) ∩ 인가(Authorization) = Auth!!! 인증(Authentication)과 인가(Authorization)는 단어의 느낌부터 비슷해서인지 많이들 헷갈려 하는 개념 중에 하나인 것 같다. 인증과 관련된 단어들이 OAuth2-처럼 표현되는 경우가 많아서 더 그런 것 같다. Deploy-Distribute-Release 만큼이나 혼란스럽다. 그렇지만 사이버 공격으로부터 조직과 사용자를 보호하기 위해 사용되는 전혀 다른 별도의 프로세스이기 때문에 차이점을 기억해 두는 것이 좋다. 인증과 인가 (둘이 합치면 Auth!!)는 기밀 데이터가 악의를 가진 타인의 손으로 넘어가지 않게 하는 첫번째 방어선이다. 따라서 강력한 인증 및 인증 방법은 모든 조직의 전반적인 보안 전력에 있어 가장 중점적으로 다뤄져야 할 부분 중 하나이다. 두 개념이 헷갈린다면 간단하.. 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.
[파이썬으로 웹개발] 내일배움캠프 개발일지 모음 사이트 후기 SCC 내일배움캠프 개발일지모음!! itwassummer.shop 이것저것 할 일이 많아서 뭘 해야 할 지 모르는 기간을 보내고 있다. 주말에 짬이 생겨서 내일배움캠프 수강생들의 개발일지를 수집하고 검색할 수 있는 간단한 사이트를 만들었다. 기능 구현에 집중하기 위해서 뷰 디자인은 다음카카오의 브런치를 많이 참조했다. 한시간에 한번씩 등록된 멤버들의 블로그를 스크랩해 몽고디비에 담아오는 파이썬 파일과, 메인 REST API 로직이 담긴 플라스크 파일을 어떻게 배포하는 것이 좋을까 고민한 끝에, EC2 인스턴스 하나에 몽고디비와 크롤링 파일을 가동하고, 플라스크 앱 파일은 ElasticBeanstalk를 통해 자동재배포하도록 했다. 이게 뭐 별거라고 재미있었다. 이번에는 최근에 알게 된 플라스크의 블루프린.. 2021. 11. 7.
플라스크는 간단하다. 하지만 간단하기만 한 것은 아니다. 이번에 마이크로 프레임워크인 플라스크를 가지고 스파르타코딩클럽 사이트의 클론코딩을 해보았다. 이 과정에서 느낀 몇가지 배운 점들을 기록으로 남겨두고자 한다. 대형 프로젝트에는 부적합하다? 이 부분을 꽤나 고민했다. 그러나 프로그래밍에 대한 대부분의 고민이 그렇듯 이미 누군가는 이 고민을 진작에 답까지 내린 상태였고, 나는 그걸 주워다 쓰기만 하면 됐다. 출처도 문제없다. 공식문서에서 나온 것이니까. 플라스크 애플리케이션 객체를 만들때, from flask import Flask app = Flask(__name__) 이렇게 만들어왔을 것이다. 무슨 뜻인지는 알고 사용했었나? 저 __name__이 무슨 뜻인지는 알고 썼던가? __name__ == "__main__" 이라는 메인 함수를 사용할 때처럼, 저 .. 2021. 10. 27.
[알고리즘] 백준 1021번 문제 회전하는 큐 파이썬 풀이 https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 2021. 10. 26.
개발 입문 전, 꼭 필요한 첫 번째 질문 보호되어 있는 글 입니다. 2021. 10. 25.