728x90
반응형

전체 글 42

[Spring Security] 기본 로그인 화면 제거

프로젝트를 진행하다 로그인을 완성하지 못한상태로 다른 기능을 테스트를 해야할 경우가 생겼다. 로그인을 해야 유저정보를 추가하고 이를 이용해 테스트를 할 수 있는데 아직 로그인 기능을 완성하지 않아 막혔다. 테스트 코드를 짜면 해볼 수 있을것 같은데 아직 실력이 부족해 시간이 오래 걸릴것 같았다. 그렇게 방법을 찾던 도중 Security 기능을 끌 수 있다는 글을 보았다. 역시 스프링은 웬만한건 지원해준다. @SpringBootApplication(exclude = SecurityAutoConfiguration.class) public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestAppli..

[Spring] UUID와 increment PK를 언제 사용할까?

이번에 프로젝트를 진행하며 코드를 보고 있었는데 UUID를 사용하는 것을 보았다. 평소에 UUID의 존재를 알고 있었지만 당연하게 AUTO INCREMENT나 IDENTITY방식을 쓰고 있었다. 그래서 UUID와 AUTO INCREMENT를 언제 구분해서 사용하는지 궁금해져 알아보았다. 1. UUID UUID는 범용 고유 식별자라는 뜻으로 128bit의 긴 고유값을 PK로 사용한다. 고유값을 PK로 사용하기 때문에 중복될 일이 없는 수준이다. 2. AUTO INCREMENT auto increment는 PK를 순서대로 1부터 자동으로 증가시키며 부여해주는 것이다. 3. 비교 먼저 UUID의 장점은 보안이다. AUTO INCREMENT는 키 값이 외부에 노출될 수도 있기 때문에 보안상 위험하다. API를 ..

[백준 14502 / JAVA] 연구소

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 이 문제는 옛날에 c++로 풀었던 문제이지만 푼지 시간도 오래 지났고 자바로 바꾼 김에 다시 풀어봤다. DFS와 BFS를 모두 사용한다. static public void DFS(int x, int y, int[][] map, int index) { if (index < 3) { for (int i = x; i < N; i++) { for (int j = 0; j < M; j++) { if (i == x &&..

코테/JAVA 2023.07.12

윈도우 환경에서 ios 푸시알림 구현 하면서 생긴 문제점

저번에 프로젝트에서 안드로이드 푸시알림을 구현한 것에 이어 ios 푸시알림을 구현해야 했다. 알아보니 안드로이드 보다 훨씬 복잡했다. spring과 firebase에서 추가로 APNS를 이용해야 했는데 이 APNS를 연동하기 위해서는 맥 환경이 필요했다. 하지만 난 윈도우 환경이라 가상환경을 설치해야 했다. 대표적으로 Vmware와 Virtualbox가 있었는데 나는 Virtualbox를 사용했다. VirtualBox를 통해 Mac os 가상환경을 설치했지만 문제가 있었다. APNS를 연동하기 위해 Xcode를 사용해야 했는데 Xcode를 사용하기 위한 버전보다 Mac 버전이 너무 낮았다. Catalina 버전을 다운했는데 너무 예전 버전이었다. 그래서 Mac os 버전을 가장 최신 버전인 Vectura..

개발 일기 2023.07.10

Spring, Firebase 연동을 통해 푸시알림 구현 하면서 생긴 문제점

이번에 진행하게 된 프로젝트에서 푸시알림 구현을 맡았다. 처음 맡아본 부분이라 구글링을 하면서 백엔드 부분을 구현했다. Spring과 Firebase를 연동하고 firebase에서 디바이스 토큰을 가져오면 이 디바이스 토큰을 이용해 알림 요청을 보내도록 만들었다. 하지만 나 혼자 테스트를 하는 부분에서 문제점이 생겼다... 보통 프론트에서 디바이스 토큰을 가져와 백엔드에서 받아서 이를 이용해 푸시알림을 구현하는데 이 프론트 부분을 안드로이드 스튜디오를 이용해 구현해 디바이스 토큰을 받았다. 문제는 이 뒤부터이다. 테스트를 위해서는 안드로이드 스튜디오를 실행하고 버츄얼 디바이스를 켠 후 도커를 실행하고 스프링 서버로 실행한 후, 포스트맨을 통해 요청을 날려야 한다. 이 과정에서 내 노트북이 터지려고 한다...

개발 일기 2023.07.09

[백준 19236 / JAVA] 청소년 상어

https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 요즘 구현과 백트레킹 문제를 많이 푸는 것 같다. 처음에는 4X4 이차원 배열에 물고기를 저장해 풀려고 했다. 하지만 풀다보니 물고기 클래스 자체에 좌표를 저장하고 이차원 배열을 쓰지 않는 것이 구현하기 더 편한 것 같아 방식을 바꾸었다. 이 문제를 풀면서 문제를 어떻게 푸는지 알아내는 것 보다 깊은 복사를 자바로 쉽게 하는 방법이 있어 따라했지만 되지 않아 원래 깊은 복사를 하..

코테/JAVA 2023.07.09

[백준 17779 / JAVA] 게리맨더링 2

https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 www.acmicpc.net 브루트포스 방식을 이용해 모든 경우로 선거구를 5개로 나누고 각 경우의 인구 차이를 구해 그 중 최솟값을 구했다. 처음에는 1, 2, 3, 4, 5번 선거구 순서대로 구한 후 결과를 찾아보려 했다. 하지만 이 방식대로 하면 5번 선거구가 제대로 나오지 않았다. 문제를 다시보니 5번 선거구를 먼저 구한 후 1, 2, 3, 4번 선거구를 구해야 했다. 예제 입력 1을 예시로 설명하겠다. 참고로 문제에서는..

코테/JAVA 2023.07.04

[Spring] 스프링 DTO

1. 기본적인 스프링의 구조 앞에서 Controller와 Service, Repository, Domain 에 대해 정리했었다. 이제 위 그림을 보면 사이사이 DTO라는 단어가 보인다. DTO는 위 그림과 같이 구조 사이 사이 데이터를 전달할 때 사용하며 계층을 나누어 관리한다. 2. DTO 란? DTO(Data Transfer Object) 단어 그대로 데이터 전달 객체라는 뜻이며, 데이터를 전달하기 위한 객체이다. 보통 DTO는 두가지로 나뉜다. Client가 요청을 보낼 때 사용하는 RequestDto, 다시 Client에게 응답을 해주는 ResponseDto이다. DTO는 오직 데이터를 전달하기 위한 객체로 getter와 setter만을 가진다. 하지만 setter는 데이터의 변경을 위해 존재하기..

[백준 15686/JAVA] 치킨 배달

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제를 보자마자 예전에 풀어본 브루트포스와 백트래킹을 이용해야하는 문제인 것을 알았다. 하지만 푼 지 오래되어 어떻게 하는지 까먹어버려 꽤 고생했다... 치킨집의 총 갯수를 C라고 한다면 C중 M개의 치킨집을 고르는 경우의 수를 모두 구해 각 거리를 구해 그 중 최소 거리를 찾으면 된다. 조합이라고 생각하면 편하다. static class Pair { Integer first..

코테/JAVA 2023.07.02

[Spring] 스프링 Controller / Service / Repository / Domain

이번에 Spring에 대해 공부하게 되었는데 내용을 정리해봐야겠다. 1. 웹 애플리케이션 계층 구조 Domain : 엔티티 선언을 통해 DB에 저장되는 객체들을 구현한다. 즉, 테이블의 각 Column들이 하나의 도메인이라 보면 된다. Repository : 데이터베이스에 직접적으로 접근해 도메인 객체를 DB에 저장하고 관리한다. 보통 Interface로 만들고 JpaRepository를 상속받아 사용한다. SQL문을 직접 입력할 수도 있다. Controller : 웹 MVC의 컨트롤러 역할, Client가 요청을 하면 그 요청을 실질적으로 수행하는 서비스를 호출한다. Service : 핵심 비즈니스 로직을 구현, 주로 리포지토리를 이용해 CRUD을 구현한다. 2. Domain package hello...

728x90
반응형