본문 바로가기

전체 글148

Github에서 Fork 한 저장소를 원본 저장소와 동기화 하는 방법 Github에서 특정 프로젝트를 Fork 하면, 원본 저장소를 자신의 저장소로 복사합니다. 이제 옮겨진 저장소에 기능을 추가하거나 내용을 수정하고 커밋을 하더라도 원본 저장소와 분리되어 있으므로 영향을 끼치지 않습니다. 어느 정도 시간을 흐르고 난 뒤, 다시 원본 저장소를 살펴보면 자신이 Fork 한 시점보다 커밋이 많이 되어 있는 것을 볼 수 있습니다. 물론 원본 저장소에서는 변경된 사항이 반영되어 있지만, Fork한 저장소는 해당 사항이 반영되어 있지 않습니다. 그래서 원본 저장소와 동기화 할 필요가 있습니다. 나중에 PR(Pull Request)를 할 때, Conflict를 줄일 수 있는 것뿐만 아니라 최신 변경된 사항을 바로 알 수 있기 때문입니다. 그래서 이번 글에서는 Fork 한 저장소를 원본.. 2020. 1. 20.
스프링 부트와 JPA 활용1,2 인프런 강의 정리 김영한님이 강의하신 인프런 스프링 부트와 JPA 활용1, 2 강좌를 학습하고 정리한 내용입니다. 소스코드는 Github를 참고해주세요 Gradle 의존관계 보기 ./gradlew dependencies --configuration compileClasspath Docker MySQL 설치 docker run -d --name test_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin007! mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 엔티티 설계시 주의점 1.가급적 Setter를 사용하지 말자 2.모든 연관관계는 지연로딩(Lazy)으로 설정하자 Fetch Join, 엔티티 .. 2020. 1. 20.
Spring Security 인프런 강의 정리 백기선님이 강의하신 인프런 스프링 시큐리티 강좌를 학습하고 정리한 내용입니다. 소스코드는 Github를 참고해주세요. Prerequisites Installing MySQL 5.7 Account Info Normal User : user / 123 Admin User : admin / !@# Password Encoder 비밀번호는 평문이 아닌 단방향 알고리즘으로 인코딩해서 저장해야 한다 {id}encodePassword PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); Password Encoder 종류 BCryptPasswordEncoder NoOpPasswordEncoder Pbkd.. 2019. 9. 5.
RSS에서 pubDate 날짜 데이터 포맷팅 RSS에서 사용하는 pubDate 타입은 다음과 같이 생겼다. 아래 이미지는 배달의민족 블로그 피드에서 가져온 내용이다. Jsoup 라이브러리를 이용해서 pubDate 값을 가져와서 SimpleDateFormat 클래스를 이용해서 포맷팅한다. String pubDate = "Thu, 18 Jul 2019 18:00:00 +0900"; SimpleDateFormat parseDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); SimpleDateFormat formatDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date parseDate = parseDat.. 2019. 7. 31.
백준알고리즘 1026번 보물 1026번 보물 문제는 정렬 문제입니다. 주어진 A와 B 배열의 각 요소를 곱한 다음 최소 합을 구해야 합니다. 소스 코드 import java.util.*; /** * 보물 문제 * 알고리즘 분류 : 정렬 * * @author jayden-lee */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); List a = new ArrayList(); List b = new ArrayList(); for (int i = 0; i < N; i++) { a.add(scanner.nextInt()); } for (int i = 0; .. 2019. 7. 31.
백준알고리즘 3052번 나머지 3052번 나머지 문제는 수학 문제입니다. 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어집니다. 각 숫자를 42로 나누어서 나온 나머지 값들 중 중복을 제거하고 난 뒤, 서로 다른 나머지 값이 몇 개인지 출력해야 합니다. 백준알고리즘 문제에서는 알고리즘 분류를 배열로 했지만 컬렉션 Set을 사용해서 중복 숫자를 쉽게 제거 할 수 있었습니다. 소스 코드 (컬렉션) import java.util.HashSet; import java.util.Scanner; import java.util.Set; /** * 나머지 문제 * 알고리즘 분류 : 배열 * * @author jayden-lee */ public class Main { private static final int N = 10; private.. 2019. 7. 30.
백준알고리즘 1316번 그룹 단어 체커 1316번 그룹 단어 체커 문제는 문자열 처리 알고리즘 문제입니다. 여기서 말하는 그룹 단어는 동일한 문자는 연속적으로 나타나야 합니다. 예를 들어, "happy" 문자열은 p가 중복으로 나오지만 연속적으로 나오기 때문에 그룹 단어입니다. 반면에 "aba" 문자열은 맨마지막에 a 문자가 떨어져서 나타나기 때문에 그룹 단어가 아닙니다. 입력 값으로는 소문자 알파벳만 나오기 때문에 알파벳 숫자만큼 크기의 visited 배열을 생성합니다. 문자열에서 문자 하나씩 순회하면서 이전에 나타났는지 체크합니다. 처음으로 나타난 문자라면 일단 변수에 저장하고, 다음 문자와 비교해서 중복인지 체크합니다. while (i < (arrWord.length-1)) { if (character != arrWord[++i]) { .. 2019. 7. 30.
Spring 파일 업로드 구현 및 파일 크기 설정 파일 업로드 컨트롤러 생성 @Controller @Slf4j public class FileUploadController { public static final Path path = Paths.get(System.getProperty("user.home"), ".upload"); @GetMapping("/form") public String form() { return "form"; } @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile multipartFile) { log.info("upload"); File targetFile = new File(path.resolve(multipartFile.getOrigi.. 2019. 7. 26.
ServletContextListener 이벤트 처리 ServletContextListener 인터페이스 스프링 웹 애플리케이션 컨텍스트의 실행 시점과 종료 시점 이벤트를 리스닝 하는 인터페이스이다. public interface ServletContextListener extends EventListener { public default void contextInitialized(ServletContextEvent sce) { } public default void contextDestroyed(ServletContextEvent sce) { } } ServletContextListener 메서드 contextInitialized : 애플리케이션이 시작될 때 호출되는 메서드 contextDestroyed : 애플리케이션이 중지될 때 호출되는 메서드 Cus.. 2019. 7. 26.