분류 전체보기
[Database] 데이터, 데이터베이스 그리고 DBMS
데이터란 무엇인가 데이터란 많은 사실 중에서 중요하며 관리가 필요하고 기록해 놓을만한 가치가 있는 것 이러한 데이터는 어디에 기록해놓아야할까? 답은 컴퓨터일것이다. 데이터베이스와 DBMS 컴퓨터에 어떤식으로 저장할까? 폴더 : 구조 및 네이밍은 사람마다 다르고 방대한 데이터를 다루기에는 번거롭다. 엑셀 : 폴더와 비슷한 이유로 많은 불편함이 존재하고 코드상에서 해당 데이터를 사용하기 위해서는 전체 데이터를 불러와야한다는 단점이 존재한다. 데이터베이스 관리 시스템 : 데이터를 모아놓은 곳을 데이터 베이스라고 하며 이러한 데이터베이스를 관리하는 소프트웨어가 DBMS이다 Q) 데이터 관리란? 데이터에 대한 CRUD 본 글은 '누구나 쉽게 SQL'이라는 책을 읽고 정리한 내용입니다. http://www.yes2..
[Spring]JUnit에서 Async메소드의 비정상적인 종료 - 1편
API를 만드는 중에 JUnit으로는 Async로 된 메소드가 제대로 작동을 하지 않고 실제 프로그램을 구동시켰을 때 메소드가 정상적으로 작동하는걸 확인했다. 해당 상황을 재현해보고 분석해보는 시간을 가지겠다. 상황은 다음과 같다. Controller에서 Service layer에 있는 메소드를 총 N 번 호출한다. Service Layer의 해당 메소드는 비동기로 처리가 되고 해당 메소드는 0부터 100까지 Count를 한다. 매 카운트마다 100밀리초를 Thread.sleep을 한다. 사실상 코드는 아무 문제가 없어 보인다. 코드는 다음과 같다. 1. Controller public class AdminController { @Autowired TestService testService; @PostM..
[Spring] Rest Docs 빌드 부터 사용까지
우리가 Api를 개발하고 이에 대한 스펙을 다른이에게 공유하기에 앞써 우리는 Api문서라는 것을 만들어야한다. Api 문서를 만드는 데에는 직접 markdown을 작성하거나 postman을 이용하거나 등등의 여러 방법이 존재하지만 오늘은 RestDocs에 대해서 이야기 해보려고 합니다. 왜 Rest Docs인가? 그럼 왜 굳이 Postman처럼 편한 방법이 있는데 다른거를 쓰려고 할까? 자동화라는 점도 매우 큰 장점이지만 테스트 케이스를 강제한다는 것이 매우 큰 이점이자 매력인거 같다. 테스트를 만들고 코드를 만들어야한다는 점은 누구나 알지만 바쁘다 보면 혹은 귀찮다는 이유로 잘 안 만들게 되는게 사실인 것 같다. 주변에 다른 개발자 분들께 물어보면 만들어야하는데 하면서 가끔은 안 만드신다고 하신다. 이..
[Spring] Spring과 Paging - [1]
이번 글도 역시 생각없이 공부했던 나에게 반성하는 의미가 있다. 생각 없이 쇼핑몰 게시판을 만들다가 문뜩 Page라는 것에 대한 찜찜한이 생겼다. Page, 맨 처음에 공부했을 때 그냥 데이터 잘라서 보낼 때 사용하는 것 정도만 이해했다. 이렇게만 생각하고 공부하다가 문뜩 누가 나한테 Spring에서 page, pageable클래스가 뭐에요? 라고 물어보면 머릿속이 하얗게 될 것이 분명했다. 과연 이 Page라는 녀석은 왜 무엇일까? Spring data와 domain 우리가 page를 import시켜서 사용할 때 이런 식으로 사용하게 된다. 그럼 Page를 이해하기 위해서는 spring의 data가 무엇인지 부터 알아야할 것이다. Spring데이터는 여러 데이터 베이스에 접근을 할 때 spring에서 ..
[Spring] Spring Security의 이해
Spring Security는 자바 어플리케이션에서 인가와 인증을 제공하는 것에 초점을 맞춘 프레임 워크이다. 스프링에서 주장하기로는 Spring security의 확장성이 매우 큰 장점이라고 한다. 근데 사실 Spring security를 사용하면 상당히 추상적이라 어떻게 접근 권한을 부여하는지에 대한 이해가 부족한 채로 그냥 사용하는 경우가 많다. 쇼핑몰을 만드는 프로젝트를 하면서 관리자 페이지랑 사용자 페이지랑 구분하면서 Spring security를 사용했다. 근데 너무 이해가 안되고 어떤 방식으로 굴러가는지도 파악이 안되서 아키텍쳐를 뜯어 봐야겠다는 생각이 들어 글을 쓰게 되었다. 먼저 그림을 보고 그림을 바탕으로 글을 진행하겠다. 1. Authentication Filter request가 들..
소프트웨어 테스트
소프트 웨어를 테스트 하는 것은 매우 중요한 절차로 개발 과정에서 여러 부분에서 테스트를 하는 방법이 존재한다. 이번에는 이러한 테스트에 관련해서 정리를 하려고 한다. 프로그램을 검증하는데는 크게 단위테스트, 통합 테스트, 인수 테스트 등이 존재한다. 이외에도 많은 것들이 있겠지만 가장 많이 쓰이는 이 3가지를 정리하려고 한다. 단위 테스트 단위 테스트는 응응 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트이다. 가장 작은 소프트웨어란 무엇일까? 자바의 입장에서 생각하면 단순한 클래스 또는 메소드 수준일 것이다. 이렇게 가장 작은 단위에 대해 검증을 진행하는 것이 어떠한 장점을 가질까? 애초에 이러한 테스트가 생기게 된 이유가 무엇일까? TDD 프로세스에 대..
[Spring] Spring 을 이용한 웹 서비스 구조
Spring으로 여러 서비스를 만들면서 Controller, Service, Repository등의 레이어드 아키텍쳐만을 생각하고 코딩을 진행했었다. 근데 문득 공부했었던 Web server와 WAS등의 개념과 같이 생각하려고 하니깐 Web Server가 controller인가? 그럼 템플릿은 정적컨텐츠가 아닌데? MVC구조에서 Web server는 어디있지? 라는 생각에 아직 개념이 확실하지 않다는 생각을 하게 되었고 이에 글을 쓰게 되었다. 웹 서버 아키텍쳐 웹 서버의 아키텍쳐가 다양할 수 있다는 생각을 가지고 공부를 진행하면 좀 더 유연하게 공부를 진행할 수 있다. 먼저 대략적인 웹 서버와 WAS에 대한 내용을 잡고 싶으면 아래 글을 참고해주면 너무 좋을거 같다. 구독과 좋아요 부탁드립니다.🤗 ht..
[Spring]@Transactional과 JUnit Test
JUnit으로 테스트 케이스를 만들어 실험을 하다가 h2 데이터베이스를 사용했을 때는 되던것이 로컬 MySQL서버와 연결하니 되지 않았다. 문제는 primary key가 reset이 되지 않고 @Transaciton에 대한 이해가 부족하여 많은 문제가 발생했기 때문이다. 이에 @Transactional에 대해 정리해보려고 한다. 다음 글은 두가지 질문에 답을 하고자 한다. 1. JUnit에서 @Before~과 @After의 트랜잭션 범위는? 2. JUnit에서 @Transaction에서는 롤백이 되는데 다른 곳에서는 @Transaction은 롤백이 되지 않을까? 트랜잭션 트랜잭션이란 데이터 베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 작업의 단위는 단순히 SQL의 질의어 하나만이 아닌..