Web 23

MyBatis 오류: Invalid bound statement (not found)

JUnit 테스트를 돌리다 만나게 된 에러인데 어떨 때 발생하는지 정리해두려고 포스팅을 한다. 1. mapper-locations 명시 안했을 경우 쿼리를 작성한 mapper xml 파일이 위치한 경로를 application.properties에 적어놔야 하는데 이걸 하지 않았을 경우 발생한다. 따라서 현재 개발하고 있는 프로젝트의 상황에 맞게 작성해주어야 한다. 예시) mapper 폴더가 있는 경우 mybatis.mapper-locations:classpath:mapper/*.xml 이렇게 적어주었다. 2. xml 파일과 dao 인터페이스가 어딘가 달라서 xml 파일에 오타가 있을 수 있고, 혹은 xml에서 id와 인터페이스에서 메소드 이름이 달라서 발생할 때에도 있다. 다만 xml 쿼리가 틀렸을 경우..

Web 2021.07.30

HTTPS(HyperText Transfer Protocol Secure)

* HTTPS(HyperText Transfer Protocol Secure) HTTPS(HyperText Transfer Protocol Secure)는 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. (HTTP는 암호화하지 않음) 그 결과 데이터의 적절한 보호를 보장할 수 있다. 데이터 전송이 HTTP(: 일반 텍스트)와 달리 함호화된 텍스트이므로 man-in-the-middle 공격이 어렵다. HTTPS는 인증서가 웹 사이트의 신원을 확인하도록 요구한다. * HTTP VS HTTPS 계층 응용 프로그램 계층 전송 계층 암호화 없음 암호화 사용 증명서 필요하지 않..

Web 2021.07.25

Get과 Post의 차이점

* Get 클라이언트에서 서버로 정보를 요청할 때 사용하는 http 메소드이다. 기존에 있는 정보를 요청할 때 사용되며 get 방식에서 값을 보내는 방식은 2가지 방식이 있다. 1. https://google.com/blog?id=value&page=1 -> 스프링에서 @RequestParam 2. https://google.com/blog/value/1 -> 스프링에서 @PathVariable 1과 같은 방식은 쿼리스트링 방식이라고 한다. 2와 같은 방식은 rest api에서 주로 사용한다. Get의 특징으로는 브라우저 히스토리에 남는다. 길이 제한이 있다. url에 정보가 노출되기 때문에 중요한 정보를 다뤄선 안된다. 데이터를 요청할 때만 사용된다. 멱등성*을 가진다. * Post 클라이언트에서 서버..

Web 2021.07.23

Session vs Token(JWT)

* 인증(Authentication) vs 인가(Authorization) 인증(Authentication) 쉽게 말해서 로그인 내가 이 사이트에 회원가입한(데이터베이스에 내 정보가 저장되어 있는) 사용자임을 아이디와 패스워드 등을 통해서 인증을 받는 것 인가(Authorization) 인증(로그인)한 사용자가 서비스의 여러 기능을 사용할 때 서버가 이 사용자가 인증을 받은 사용자라는 것을 알아보고 허가를 해주는 것 * 인가(Authorization)를 어떻게 처리할 것인가? 네이버와 다음 같은 대규모 서비스를 생각해보자. 어떤 사람은 로그인 하지 않은 채로 뉴스를 읽고 어떤 사람은 로그인한 상태에서 메일을 보낸다. 매 초마다 수천, 수만개의 요청이 서버로 날아든다. 이 요청들 중 어떤 것은 로그인하지 ..

Web 2021.07.09

CORS(Cross-Origin Resource Sharing)

* CORS(Cross Origin Resource Sharing) 추가 HTTP 헤더를 사용하여, 한 Origin에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다. 웹 어플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 http 요청을 실행한다. 예를 들어 https://hithis_a.com 의 프론트엔드 자바스크립트 코드가 XMLHttpRequest를 사용하여 https://hellothis_b.com/data.json 을 요청하는 경우 등이 교차 출처 요청의 예시가 되겠다. 보안 때문에, XMLHttpRequest는 자신의 출처와 동일한 리소스만 부를 수 있어서, 다른 출처(도메인, 프로토콜,..

Web 2021.05.20

SPA(Single Page Application)

* SPA? SPA는 Single Page Application의 약자로, 말 그대로 단일 페이지로 구성된 웹 어플리케이션을 말한다. SPA에서는 페이지 새로고침이 발생하지 않는다. 전체 페이지를 새로고침하지 않고, 클라이언트가 필요한 부분만 자바스크립트를 사용하여 업데이트 한다. 좀 더 자세히 말하자면 서버로부터 JSON으로 데이터를 받아와서 클라이언트가 렌더링해서 화면에 데이터를 뿌려준다. SPA를 쉽게 이해하는 방법은 레고를 생각하는 것이다. 어렸을 때 가지고 놀던 레고를 생각해보면 저렇게 생긴 초록색 판이 들어있던 것이 기억날 것이다. 저 초록판을 화면이라고 생각하고 레고 블럭을 화면 컴포넌트라고 생각해보자. Multi-Page 방식에서는 매번 저 초록판을 새로 가져온다고 생각하면 된다. 반면 S..

Web 2021.05.19

MVC vs MVVM

MVC 패턴과 MVVM 패턴에 대해서는 지난번에 각각 포스팅을 한 적이 있었다. [지난 포스트] MVC - superbono-2020.tistory.com/78 MVC Model View Controller MVC 패턴이란 어플리케이션을 Model View Controller 세 영역으로 구분하고 나눈 것이다. Model (Service, Dao, Java Beans) 로직(비니지스 & db)로직을 처리하는 모든 것이다. controller.. superbono-2020.tistory.com MVVM - superbono-2020.tistory.com/51 MVVM * MVVM Model? 모델-뷰-뷰 모델(model-view-viewmodel, MVVM)은 디자인 패턴 중에 하나이다. MVVM 패턴을 ..

Web 2021.05.12

REST(Representatilnal State Transfer) API

* OPEN API (Application Programming Interface) - OPEN API 는 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 interface(약속). - OPEN API와 함께 거론되는 기술이 REST이며, 대부분의 OPEN API는 REST 방식으로 지원됨 - 데이터를 외부 응용 프로그램에서 사용할 수 있도록 OPEN API를 써야 하는데 외부 응용에서 어떤 방식으로 쓸지 모른다. 따라서 xml, JSON을 선호함 * REST(Representatilnal State Transfer) - REST는 'Representatilnal State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송 방식을 결합해서 원하는 작업..

Web 2021.05.04

메이븐(Maven) 이란?

* 메이븐의 정의 아파치 재단에서 만든 메이븐은 자바 프로젝트 관리 도구이다. 자바에서 주로 사용되긴 하나 C#, Ruby, Scala 등 기타 언어로 작성된 프로젝트를 빌드하고 관리할 수도 있다. 아파치 라이선스로 배포되는 오픈 소스 소프트웨어이다. * 메이븐의 이점 프로젝트의 규모가 커서 많은 개발자들이 개발에 참여할 경우 개발 환경(개발에 필요한 jar 파일, 또는 그 파일들의 버전) 등이 모두 다르고 그걸 일일히 수동으로 맞추려면 굉장히 까다롭고 힘든 시간 낭비가 될 것이다. maven을 사용하면 그러한 문제를 손쉽게 해결할 수 있다. 필요한 라이브러리들을 pom.xml에 정의해놓으면 알아서 네트워크를 통해 자동으로 다운 및 관리해준다. * 자바에서의 메이븐 사용 - project home: po..

Web 2021.04.29

IoC(Inversion of Control)/DI

* IoC(Inversion of Control, 제어의 역행) - IoC/DI - 객체 지향 언어에서 객체들간의 연결 관계를 런타임에 결정한다. (런타임? =객체를 만든다는 뜻은 new를 이용하여 메모리를 할당한다는 뜻인데 이건 실행될 때 만들어진다는 것) - 객체 간의 관계가 느슨하게 연결됨(loose coupling) -> IoC 적용했을 때 얘기 - IoC의 구현 방법 중 하나가 DI(Dependency Injection) DL도 있음 * IoC 유형 @ DL(Dependency Lookup) - 어디에 만들어놓고 필요하면 갖다 쓰고 다 쓰면 다시 반납한다. - 컨테이너가 lookup context를 통해서 필요한 resource나 객체를 얻는 방식 - JNDI 이외의 방법을 사용한다면 JNDI ..

Web 2021.04.29