목록분류 전체보기 (78)
윤개발
Java를 처음 접할때 배우는 메소드임에도 잘 모르고 쓰는 경우가 많은 Equals와 Hashcode에 대해서 알아보자. 두 메소드는 모든 객체의 부모인 Object 클래스에 구현되어있다. Objcect의 구현된 소스코드를 살펴보자. // Indicates whether some other object is "equal to" this one. public boolean equals(Object obj) { return (this == obj); } Object 클래스에 구현된 equals 클래스이다. 생각보다 코드가 단순하고 객체 자체가 같은지를 비교하는 코드이다. 다음은 hashcode이다. hashcode는 따로 작성된 코드가 없이 native라는 코드가 붙어있다. /** * Returns a ha..
스프링 시큐리티에 대해 제대로 알고 쓰기위해 공식문서를 쭉 읽어보았고 개발시에 알아야될 부분을 정리해보았습니다. docs.spring.io/spring-security/site/docs/5.4.6/reference/html5/#servlet-architecture Spring Security Reference In Spring Security 3.0, the codebase was sub-divided into separate jars which more clearly separate different functionality areas and third-party dependencies. If you use Maven to build your project, these are the modules yo..
이번에 진행하는 프로젝트의 요구사항이 다음과 같습니다. gitlab에 public으로 Markdown(이하 md) 업로드 - 로그인 없이 볼 수 있는 페이지여야함 Vue에서 gitlab markdown을 로딩하여 보여줌 - gitlab 페이지 호출 이렇게 진행하면 다음과 같은 장단점이 있습니다. 장점 html을 수정할 필요 없이 바라보는 gitlab md 파일만 수정하여도 운영환경에 반영(재배포가 필요없음) 프로젝트 초기 자주 수정될 수 있는 Guide, Faq등은 md로 간단하게 표현 가능 단점 gitlab(또는 github) 에서 md를 가져오므로 정적파일을 로딩하는 것보다는 시간이 조금 더 걸림 md를 이용하다 보니 style 적용은 힘듬 Vue에서 Markdown을 불러오며 단점을 극복하기 위해 ..
Gathering-bot 서비스를 개발하면서 성능에서 가장 크게 고민했던 부분에 대한 포스팅입니다. 1. 초기 설계 개발 전 Gathering-bot 서비스 데이터베이스 설계는 다음과 같습니다. 다른 테이블(사람, 배치등)과 일부 컬럼(생성한 사람, 응답시간등)은 주제와 연관이 없어 표기하지 않았습니다 시트는 1개 이상의 취합 항목을 가지고 있습니다. 취합 항목은 시트_id 를 FK로 가진다. 시트는 1개 이상의 응답을 가지고 있습니다. 응답은 시트_id 를 FK로 가진다. 응답은 1개 이상의 응답 항목을 가지고 있으며 시트의 취합항목에 대한 응답입니다. 응답 항목은 응답_id를 FK로 가지며 취합항목_id를 FK로 가진다. 2. 성능 이슈 고민 초기 데이터베이스 설계와 함께 JPA의 지연로딩을 사용하여..
🖐️ 프로젝트 개요 사내에서는 많은 취합 업무가 발생하며 주로 엑셀을 통해 작성하고 메일로 전달되어 통합된다. 메일로 이루어지기 때문에 취합담당자는 수많은 엑셀을 받아서 통합하는 과정이 필요하다. 우리 회사는 폐쇄망이므로 외부 인터넷이 불가능하다 즉 구글 설문조사, 공유문서 사용이 불가능하다 엑셀로 처리하는 취합업무를 빠르게 처리해보고자 프로젝트를 시작하게되었다. 🔎 조사 사내망에서 구글 설문조사, 구글 공유문서를 사용할 수 없음. 미응답자에게 다시 회신해달라는 리마인드 메일을 보내야하는 불편함, 제출 안한 사람의 이메일을 일일히 입력해줘야하는 귀찮음 응답하는 인원은 일을 미뤘다가 응답을 잊을 수도 있음. 수정 요청하는 경우에는 취합을 다시 반복해야함 🔥 프로젝트 내용 취합 담당자 로그인을 하고 시트를 ..
문제 주소 leetcode.com/problems/longest-substring-without-repeating-characters/ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 내용 Given a string s, find the length of the longest substring without repeating characters. 해설 문자열이 주어질 때 반복되..
Spring Security에 대해 학습하고 로그인, 사용자 관리 웹어플리케이션 개발한다. 프로젝트 개요 게시판을 만드는 프로젝트는 CRUD 기능을 구현하기 위한 기본이 되는 프로젝트라 할 수 있다. 이런 기본적인 게시판에 스프링 시큐리티를 적용해 살을 덧붙이고 싶다는 생각이 들었다. 게시판을 만드는 "구현"에 더해 게시판별로 권한을 처리한다. 또한 동시 접속 서비스 이용자가 1만명이라는 가정하에 "성능"의 측면에서 깊게 고민하며 개발할 예정이다. 구현 목표 구현목표는 아래와 같이 3가지로 정의하였다. 1. Spring Security를 이용하여 여러 방식으로 로그인을 구현한다. (Security 학습) Session JWT Token OAuth 2.0 (추후 예정) 2. 권한 그룹을 만들고 사용자를 관..
용어 설명 Authentication(인증) : 사용자가 본인인지 맞는지 확인 Authorization(권한) : 인증된 사용자가 요청에 접근 가능한지 확인 기본 원리 Client의 요청은 Filter Chain을 거쳐 처리된다. 여러 필터를 지나며 인증이 완료되면 해당요청은 인증된 요청이 된다. 모든 필터를 지나며 인증되지 않았다면 인증되지 않은 요청(403)이 된다. 처리 방식 요청이 오면 인증을 담당하는 AuthenticationFilter에서 처리한다. UsernamePasswordAuthenticationToken을 만들어 AuthenticationManager(인터페이스)에게 위임한다. AuthenticationManager를 구현한 ProviderManager는 AuthenricationPr..
Kafka의 기본이 되는 토픽과 파티션에 대해서 알아보자. Topic (토픽) 전송되는 데이터 스트림을 토픽이라 한다. 토픽은 로그가 될수도 있고 어떠한 데이터도 될 수 있다. 그림에서는 hello 라는 이름의 토픽을 가지고 있다. 데이터베이스의 테이블과 유사하며 제약이 없다. 원하는 만큼 많은 토픽을 생성할 수 있다. (hello_1, hello_2, hello_3 ...) 각 토픽은 이름을 통해 구분된다. Partitions (파티션) 하나의 토픽은 여러개의 파티션으로 구분된다. 그림에서 hello 토픽은 3개의 파티션으로 나뉘게 된다. 파티션은 0 부터 증가하는 id로 구별되며 파티션0, 파티션1, 파티션2은 모두 다른 파티션이다. 각각의 파티션에는 전송된 데이터가 저장이 된다. 데이터가 기록되면 ..
Apache Kafka를 사용하는 이유를 간단하게 알아봅시다. 1. 초기 시스템 처음의 시스템은 사진처럼 단순한 형태를 가지고 있습니다. 예를 들어 웹사이트에서 사용자의 동작을 분석하는 시스템을 생각해봅시다. 데이터를 전송하는 시스템 ( 웹애플리케이션 ) 전송되는 데이터 ( 사용자의 페이지 이동, 동작 등의 데이터 ) 데이터를 받는 시스템 ( 데이터를 받아 처리하는 Spark 등 ) 하지만 추후에 분석해야할 페이지가 늘어나고 더 다양한 분석 시스템이 도입되어 시스템의 규모가 커진다면 어떻게 될까요? 2. 대규모 시스템 다수의 시스템이 생기면 그림처럼 각 시스템의 복잡도가 증가합니다. 4개의 소스시스템과 6개의 타켓 시스템이 모두 연결되어 있다고 가정하면 4*6=24 개의 통합과정이 필요합니다. 시스템 통..