목록분류 전체보기 (462)
hyeonga_code
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bRj63k/btsHCUDlzBo/SN1g7H13ZiAswMVskmtkTK/img.png)
MySQL을 사용하려고 한다.이전 프로젝트에서는 팀원들과 작업을 해야 하여 AWS 서버를 열고 RDS를 사용했으나, 개인 작업이므로 로컬 저장소의 DB를 사용하려고 한다. 1. MySql에서 사용하려는 데이터베이스를 생성하고 관리자 계정을 생성한다.-- 데이터베이스 생성SHOW DATABASES;CREATE DATABASE hyeongarl;-- 관리자 계정 생성CREATE USER hyeongarl@localhost IDENTIFIED BY 비밀번호;-- 데이터베이스에 대한 모든 권한 부여GRANT ALL PRIVILEGES ON hyeongarl.* TO hyeongarl@localhost;-- 변경 사항 적용FLUSH PRIVILEGES;-- 생성된 사용자 확인하기SELECT user, host F..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cizfqh/btsHu2CeCHB/dTxeSMNiKtWQjnMkKl4yw1/img.png)
1. 공유 메모리 기법스레드들이 공유하는 메모리 영역을 사용하여 데이터를 공유합니다. 스레드는 공유 변수나 객체를 통해 서로의 상태를 체크하고 조작할 수 있습니다. volatile 키워드를 사용한 변수 synchronized 블록을 통한 동기화 Amonic 클래스 등을 사용하여 데이터 일관성과 스레드 안전성을 보장합니다. 2. 메세지 전달 기법스레드 간의 메세지를 명시적으로 보내고 받는 방식입니다. 스레드가 직접적으로 데이터를 공유하지 않고 메세지를 통해 필요한 정보를 교환합니다. BlockingQueue 같은 스레드 안전한 큐를 사용하여 스레드 간에 메세지를 전달할 수 있습니다. 생산자 스레드는 큐에 데이터를 넣고 소비자 스레드는 데이터를 꺼내 처리합니다. 공유 메모리와 메세지 전달 비교공유 메모리 기..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xN0yI/btsHvY63mld/XtW1Rxgkgsw6Hgf3hLfUR1/img.png)
목표.Controller 코드를 테스트하는 ControllerTest 코드를 작성하고자했다. 문제점.유사한 환경의 다른 사람의 작업을 참고하려다 보니, 이리저리 혼합되어 이도저도 아닌 코드가 되어버렸다.결국 @SpringBootTest 어노테이션과 @WebMvcTest 어노테이션을 같이 작성하는 코드가 되어버렸다.테스트에 대해 어렴풋이 알고 있어서 발생한 문제점이라고 생각된다.통합테스트와 단위테스트를 이해했지만, 이론은 이론이고 적용은 또다른 문제였다. @SpringBootTest vs @WebMvcTest@SpringBootTest전체 스프링 애플리케이션 컨텍스트를 로드하여 테스트한다.실제 애플리케이션과 동일한 방식으로 테스트를 수행할 수 있다.실제로 실행 중인 애플리케이션과 비슷한 테스트를 작성할..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwg2B2/btsHlFA41fn/OTmy7Nejd2LToXqi5vyjoK/img.png)
목표.Controller만 먼저 작성하여 흐름을 파악하고자 했다. 문제점.SpringBoot와 Gradle 을 활용한 프로젝트를 처음 접하는 과정으로 하나부터 열까지 모두 찾아보며 작업해야 해서 시간도 오래걸리고 제대로 하고있는지도 확신이 서지 않아 갈팡질팡 하고 있는 과정이다.. ResponseEntity를 사용하는 로직.최근 코드들은 try-catch문이나 if-else 문을 사용하지 않는 코드로 클린 코드를 지향하는 추세라고 한다.중첩되는 try-catch문이나 if-else 문은 코드를 복잡하게 만들어 가독성이 떨어지고, 유지보수가 어려워지는 문제점이 발생한다. 하나의 메소드에서 많은 작업을 처리하게 되면 코드의 유지보수성과 재사용성도 떨어지게 된다. 참고했던 코드들에서 ResponseEnti..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNnNzb/btsHmq4VZEt/PBXtS6LnasNFmk2kNqYXKK/img.png)
ResponseEntity스프링 프레임워크에서 RESTful 웹 서비스를 구현할 때 많은 이점을 제공합니다.HTTP 응답을 보다 세밀하게 제어할 수 있게 하며 상태 코드, 헤더, 응답 본문 등을 포함하는 HTTP 응답 전체를 나타낼 수 있습니다.HttpEntity를 상속받아 구현한 클래스입니다. 1. 응답상태 코드 커스터마이징HttpStatus1xx : 요청을 받아 프로세스를 계속 진행합니다.2xx : 클라이언트의 요청이 성공적으로 수신, 이해, 수용되었습니다.3xx : 추가 동작이 필요하여 요청을 완료해야 합니다.4xx : 클라이언트의 잘못된 요청으로 서버가 요청을 처리할 수 없습니다.5xx : 서버가 유효한 요청에 대해 오류를 처리하지 못했습니다. HttpStatus.OK : 성공적인 요청을 나타내..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZWZwR/btsHndQP4tV/9jkiJK3aJK31VZVeKqqDjk/img.png)
Spring Web Layer1. Web Layer뷰 템플릿 영역입니다.( @Controller, JSP, Freemarker ) 외부 요청과 응답에 대한 전반적인 영역입니다.( @Filter, 인터셉터, @ControllerAdvice ) 2. Service Layer@Service에 사용되는 서비스 영역입니다.일반적으로 Controller와 DAO의 중간 영역에서 사용합니다.@Transactional이 사용되어야 하는 영역입니다. 3. Repository Layer데이터베이스와 같이 데이터 저장소에 접근하는 영역입니다. 4. DTO계층 간의 데이터 교환을 위한 객체의 영역입니다.( 뷰 템플릿 엔진에서 사용될 객체, Repository Layer에서 결과로 넘겨주는 객체 ) 5. Domain Model..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Uawx5/btsHndiKtWh/AYLykpaITNvownWKh03hb1/img.png)
영속성 Persistence프로그램이 종료되어도 데이터가 사라지지 않고 저장되는 개념 SQL MapperObject와 SQL의 필드를 매핑하여 데이터를 객체화합니다.객체와 테이블 간의 관계를 매핑하는 것이 아니라 SQL 문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할 지 바인딩하는 방법입니다.DBMS에 종속적인 문제점을 가질 수 있습니다.JDBC Template, MyBatis가 포함됩니다. ORM Object-Relational Mapping객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 호환성을 높이기 위해 사용되는 프로그래밍 기법입니다.데이터베이스 테이블을 객체로 매핑하여 데이터베이스 작업을 직관적이고 객체 지향적으로 처리할 수 있습니다. 객체와 데이터베이스의 테이블을 자동으로 매..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Lf3M7/btsHk3BCgu1/wH05vadLGQzsNa1cAyIIhK/img.png)
REST Representational State Transfer하나의 URI가 고유한 리소스를 처리하는 공통 방식입니다.REST 방식으로 제공되는 API를 REST API(RESTful API)라 하며 OpenAPI에 많이 사용됩니다. @RestControllerSpring 3 버전에서 @ResponseBody 어노테이션을 지원하며 REST 방식의 데이터 처리를 지원했습니다.Spring 4 버전에서 @RestController 어노테이션을 이용하여 REST 방식의 데이터 처리를 지원합니다. @RestController 어노테이션이 적용된 클래스는 @ResponseBody 가 기본적으로 포함되어 있어 메소드의 반환값을 HTTP 응답 본문(Body)에서 사용할 수 있습니다.JSON이나 XML 형식의 데이터..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CVkzo/btsHkMUmPWv/hc7y4frZlviyBIp9y4FtL1/img.png)
보통 웹 애플리케이션을 개발할 때 디자이너가 화면을, 데이터페이브 연동 등의 비즈니스 로직은 프로그래머가 작성 웹 애플리케이션 모델많이 사용하는 표준화 소스 구조를 의미합니다. 웹 애플리케이션 모델 종류모델 1 방식데이터베이스 연동 같은 비즈니스 로직 작업과 결과를 나타내는 작업을 동일한 JSP에서 수행합니다.클라이언트의 요청과 비즈니스 로직 처리를 JSP가 담당하는 구조입니다. 기능 구현이 쉽고 편리하지만 기능이 복잡해지면 화면 기능과 비즈니스 로직이 섞여 유지보수가 어려워집니다.디자이너가 비즈니스 로직 기능도 알아야 작업하기 쉽지 않습니다.코드 재사용성이 떨어집니다. 모델 2 방식웹 애플리케이션의 각 기능(클라이언트 요청 처리, 응답 처리, 비즈니스 로직 처리)를 분리해서 구현합니다.객체 지향 프..
1. Allow Merge CommitsPull Request 에서 제안된 변경사항을 기존 코드에 통합할 때, 모든 개별 커밋을 유지하면서 별도의 병합 커밋을 생성합니다.두 브랜치의 기록을 보존합니다. (모든 커밋과 메인 브랜치의 커밋 기록이 그대로 유지됩니다.) 장점 : 기여자의 모든 커밋을 명확하게 보존하여 기여한 사람들과 정확한 기여 내용을 추적할 수 있습니다.복잡한 프로젝트에서 변경 사항의 컨텍스트를 보존하는 데 유리합니다. 단점:커밋 히스토리가 복잡해질 수 있으며 이는 이후에 히스토리를 이해하거나 문제를 디버깅할 때 어려움을 초래할 수 있습니다. 2. Allow Squash MergingPull Request의 모든 커밋을 단일 커밋으로 압축하여 메인 브랜치에 병합합니다.변경사항을 하나의 커밋으..