목록전체 글 (75)
ballqs 님의 블로그
예전에 AOP에 관한 글을 작성했는데 그부분은 아주 간단하게 사용하는 방법에 대해서였다.그러나 현재 같은 AOP를 다시 작성하게 된 이유는 동작 흐름이 어떻게 흘러가는지?패턴은 어떤식으로 되는지 배웠기 때문에 작성한다. 이전 AOP 작성글 : https://ballqs.tistory.com/44AOP의 동작 흐름개념적 이해스프링 실제 동작시퀀스 다이어그램(Sequence Diagram)AOP 적용 전 AOP 적용 후Spring이 프록시(가짜 혹은 대리) 객체를 중간에 삽입한다.DispatcherServlet 과 ProductController 입장에서는 변화가 전혀 없다.호출되는 함수의 input, output 이 완전 동일하다"joinPoint.proceed()" 에 의해서 원래 호출하려고 했던 함수,..
Redis 공부해야지 공부해야지 생각만 했었는데 이제서야 들여다보면서 알아보고 적용해보았다.작성하는데 도움이 된 참조글 : https://akku-dev.tistory.com/102 Redis란?Remote Dictionary Server의 약자로, 오픈 소스 기반의 인메모리 데이터 구조 저장소이다.데이터베이스, 캐시, 메시지 브로커 등의 용도로 사용할 수 있고 Redis는 매우 빠른 속도로 데이터를 처리할 수 있어 성능이 중요한 애플리케이션에 많이 사용된다.Redis 특징 인메모리 저장소: Redis는 데이터를 메모리(RAM)에 저장하여 빠른 읽기 및 쓰기 성능을 제공한다. 이 덕분에 캐싱 서버나 세션 저장소로 많이 활용된다.다양한 자료 구조 지원: 일반적인 키-값(Key-Value) 구조뿐만 아니라,..
🍀Keepinterface DTO를 사용해 코드 문제를 해결 한 점이 좋았다.프로젝트 부분에서 팀 분위기가 풀렸긴 하나 좋은 분위기로 프로젝트를 진행하는 점이 좋았다.K: 의견을 낼 때 각자의 장, 단점을 파악하고 설득하려는 부분이 좋았다.구글시트,피그마등 협업 시 공동작업 프로세스들강의에서 배운 내용 외에 처음 접한 기능을 구현하여 차별화된 프로젝트를 완성하였고 그 과정에서 다양한 방식으로 코드를 짤 수 있음을 배웠다.❎ Problem설계 단계에서 제대로 소통이 안되었고 개발 과정에서 설계의 미숙함을 발견하고 중간에 바꾸는게 많았다.팀 내의 의사소통이 별로 없었다.진도가 늦어서 다른 사람들이 하는 기능, 설명 등을 자세히 이해할 수 없다.개발 진행 중 설계 변경이 잦아 햇갈림초반 설계 후 기능구현을 ..
뉴스피드 프로젝트를 진행할 때 여러모로 작성해두었던 예외처리들이 많이 지저분해보여서 CustomException 작성 등 ErrorCode 를 Enum으로 관리해서 코드를 바꾸기로 했다.수정 전 UserService.java 의 한 메서드// 회원 탈퇴public void deleteAccount(AuthUser authUser, UserUnregisterDto userUnregisterDto) { // 사용자 조회 User user = userRepository.findById(authUser.getUserId()) .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다.")); if (!user.getEma..
뉴스피드 게시물 조회하는 기능을 구현하고 있는 도중 발생한 문제이다.해당 데이터들을 어떻게 가져와야 할지? 고민이 많았고 모든 과정을 기록하진 못하지만 이렇게 해서 해결했더라 정도를 기록하는 글이다.도입부뉴스피드 게시물 조회란?내 게시물이랑 친구 게시물을 페이지네이션 및 정렬기준과 기한 검색을 기반으로 하는 기능이다. 해당 기능을 구현하기 위해 구성한 Entity의 구성을 작성해야 추후 내가 다시 봤을때 왜 그랬는지 이해가 쉬울 것 같다.작성한 구조는 아래와 같다. 해당 Entity의 구성에서 뉴스피드 게시물 조회를 진행하기로 했다. 게시물 위주의 조회다보니 주가 되었던건 게시물(Board) 기반으로 코드를 작성하여 아래와 같이 틀을 잡았다.NewsfeedController.java 작성@RestCon..
Spring Security란?Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해주며 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크이다.dependencies 추가implementation 'org.springframework.boot:spring-boot-starter-security'@Configuration를 통한 사용 방법@Configuration@EnableWebSecurity // Spring Security 지원을 가능하게 함public class WebSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) ..
스프링은 여러 특징이 있고 그중 하나가 AOP 라고 생각한다.AOP란?AOP(Aspect-Oriented Programming)는 '관전 지향 프로그래밍' 이라는 의미이고 메소드에 대해서 공통적으로 적용해줘야 하는 기능이 있다면 메소드마다 따로 코딩하면 중복코딩이 많아지기 때문에 AOP를 통해서 공통적으로 적용할수 있다. 대표적으로 사용되는 상황은 아래와 같다.로깅(Logging) : 애플리케이션의 전역적인 로깅을 구현할 때 AOP를 사용! 특정 메서드나 클래스에 대한 로그를 남기는 작업을 코드에 직접 삽입하는 대신, AOP를 통해 자동으로 로그를 기록할 수 있다. 이는 코드의 중복을 줄이고 유지보수를 쉽게 만든다.트랜잭션 관리(Transaction Management) : 트랜잭션 관리는 비즈니스 로직..
오늘은 강의를 들으면서 테스트 코드 작성하는 것에 대해서 메모했다. 기본적인 테스트 코드 작성 방법MyMath.java 코드 작성public class MyMath { public int calculateSum(int[] numbers) { int sum = 0; for (int number : numbers) { sum += number; } return sum; }} 테스트 코드 작성public class MyMathTest { private MyMath math = new MyMath(); @Test void calculateSum_ThreeMemberArray() { // Absence o..
오늘 풀어본 문제는 프로그래머스의 점 찍기 라는 문제를 풀어보았다.애초에 어떻게 접근해야할지 감도 못잡고 있다가 같이 공부중인 분이 힌트를 줘서 진행이 가능해졌다.문제 설명이 문제는 x축과 y축이 직교하는 좌표명면에서 k 값과 d 값이 주어지면 다음과 같이 점을 찍는다.원점(0, 0)으로부터 x축 방향으로 a*k(a = 0, 1, 2, 3 ...), y축 방향으로 b*k(b = 0, 1, 2, 3 ...)만큼 떨어진 위치에 점을 찍습니다.원점과 거리가 d를 넘는 위치에는 점을 찍지 않습니다.이는 좌표명면에 d 반지름의 원안에 k라는 간격만큼 점을 얼마나 찍을수 있는지 알아보기 위한 문제이다.제한 조건1 ≤ k ≤ 1,000,0001 ≤ d ≤ 1,000,000입출력 예kdresult2461526풀이과정주..
DB에 데이터를 저장해야하는 일이 있을때 대용량으로 데이터를 넣어야하는 경우가 있다면 JPA에서는 매번 하나하나 Insert문을 만들어서 실행시키고 있을 것이다. 이건 대용량으로 insert 하는것에 매우 적합하지 않은 방법이다.SQL에서는 insert 에 values 를 연달아 쓰는 방법이 바로 Bulk Insert 방법이다.그렇게 글 내용대로 3가지를 비교해보도록 하겠다. 참조글 : Spring JPA Save() vs SaveAll() vs Bulk InsertSave()@Test@Transactional@Rollback@DisplayName("Save() 테스트")void Test1() { long startTime = System.currentTimeMillis(); for (int ..