본문 바로가기

분류 전체보기47

[Tomcat] MathType Container Server 구축기 (1) 개발 중인 서비스에서 프론트 측에서 수식 키보드가 필요하다는 요청이 들어왔다. MathType... 이게 뭐지 싶었지만 공식문서에 설명이 잘 나와 있어서 순조롭게 진행 되었다. 현재 요구사항은 수식을 호출할 수 있는 도메인 서비스 구축이다. Java Servlet / PHP를 이용한 가이드 문서 링크 https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-for-html-editors/mathtype-generic-integration.html MathType Generic integration Important complementary information docs.wiris.com php는 사용해본적이 없어.. Servlet 기반으로 구축.. 2023. 11. 22.
[GIT] Fork & Pull Request 프로젝트를 진행하면서 팀원들의 이해를 돕고자 Fork와 PR 과정에 대해 정리를 하게 되었다. Fork와 PR(Pull Request) 아래 그림과 같이 Pet-K-In repository와 개인 repository가 있다라고 가정해 보자. 누군가가 Pet-K-In Service 에 기여하고 싶어 할때 다른 사람의 저장소의 코드 변경하려면 해당 프로젝트의 관리자가 직접 나를 Contributor로 등록을 해주어야 한다. 모든 사람을 아무나 등록해 줄수는 없는 노릇이기에 이때 사용하는 것이 Fork의 기능이다. Fork Fork는 간단히 말해 타인의 저장소에 있는 레파지토리를 내 원격 저장소인 깃허브로 가져오는 것이다. Fork를 진행하면 자신의 원격 저장소로 가져온 소스를 확인할 수 있고, 하단 그림과 .. 2023. 11. 19.
[NCP] Nginx를 이용한 Static Resource Container service 구축기(2) nginx 설정에 대해 지난 정리하는 글에서 이어집니다! https://dev-junhee.tistory.com/69 [NCP] Nginx를 이용한 Static Resource Container service 구축기(1) Naver Cloud Platform에 몇가지 기능의 부재로 프론트 소스 도메인 서비스를 위해 nginx를 통한 정적 리소스 서버를 구축하였고, 쿠버네티스와의 연동과 오케스트레이션을 위해 컨테이너 기반으로 구 dev-junhee.tistory.com 기본적으로 k8s 클러스터, 마스터, 워커노드를 편하게 구성할 수 있도록 제공되는 nks를 사용하고 있습니다. 인프라 설계에 대한 부분에 설명은 추후에 진행중인 사이드 프로젝트에 적용 예정이여 패키지로 제공하는 서비스 없이 직접 구현 해보면.. 2023. 11. 13.
[NCP] Nginx를 이용한 Static Resource Container service 구축기(1) Naver Cloud Platform에 몇가지 기능의 부재로 프론트 소스 도메인 서비스를 위해 nginx를 통한 정적 리소스 서버를 구축하였고, 쿠버네티스와의 연동과 오케스트레이션을 위해 컨테이너 기반으로 구축하기로 하였다. Nginx 설정Resource serving 흐름 및 구성도 Nginx Configure – 전체적인 설정에 대한 설명 Nginx Configure – 세부 설명location 문법 우선순위regex적용 순위설명문법=1 순위완전 일치location = / {}^~2 순위prefix 일치location ^~ / {}~3 순위대/소문자 일치location ~ ^/ {}~*4 순위대/소문자 무시하고 일치location ~* ^/admin {}/5 순위하위 일치location / {}rew.. 2023. 10. 26.
Trie 자료구조 - 14425 https://www.acmicpc.net/problem/14425 문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 출력 첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다. Tri.. 2023. 7. 19.
[Item49] 매개변수가 유효한지 검사하라 메서드, 생성자에서 받은 매개변수가 특정 제약에 만족해야 한다면 오류는 발생한 곳에서 잡아야 하며 반드시 *문서화를 해야한다. *문서화 (제약의 설명을 문서화 하고 예외의 경우 @throws 자바독 태그를 사용하여 문서화 할 수 있다.) 매개변수 검사를 제대로 하지 못하면 잘못된 결과, 모호한 예외, 해당 지점 이외에서 발생하는 문제를 초래할 수 있다. 다시 말해 *실패의 원자성을 지키기 위해 매개변수의 검사는 필요하다. *실패의 원자성 (예외를 던지고 난 뒤에도 객체는 상태가 이전 상태와 동일하며 사용가능한 형태로 남아야한다.) Objects Utility Class NullPoniterExceptoin, IndexOutOfBoundsException 등의 예외에 대한 유효성 검사에 도움을 주는 Obj.. 2023. 7. 13.
LinkedList 직접 구현해 보기 요약 정리 LinkedList(연결 리스트)를 구현하기 앞서 해당 자료 구조에 대해 알아보자. 우선 List라고 하면 인덱스 구조로 위치를 갖고, 순서를 보장하는 자료구조라고 설명할 수 있겠다. 더 나아가 LinkedList는 삽입 / 삭제의 장점을 갖지만, 특정 노드 탐색시 다른 List에 비해 오래 걸린다는 단점이 있다. 삽입 / 삭제의 장점을 갖을 수 있는 이유는 LinkedList의 종류에 따라 다르지만, 모두 노드의 연결로 이루어져 있으며 인접 노드의 주소를 포인터로 가르키고 있어 중간에 삽입 / 삭제가 이루어 져도 해당 노드를 끊고 인접 노드의 주소를 연결해 주면 될뿐 대표적인 ArrayList처럼 데이터를 미루거나 당기는 작업이 필요 없다. LinkedList에는 Singly, Doubly,.. 2023. 7. 11.
[Item 7] 다 쓴 객체 참조를 해제하라 객체 참조 해제란 메서드 내에서 사용할 객체를 인스턴스화 하여 로컬 변수에 할당하여 참조하고 사용 후 더 이상 사용하지 않는다고 명시적 null처리로 참조 관계를 끊어주거나 해당 메서드가 종료되면 더 이상 사용하지 않을 인스턴스로 참조 관계를 해지하는 것. 보통은 메서드 종료시 변수가 유효 범위를 벗어나게 되어 더 이상 사용하지 않아 가비지 컬렉터가 참조 관계가 끊어진 객체를 회수하는게 가장 좋지만 그렇지 않은 예외적인 경우도 있다. 책에서 나온 예제 코드를 본다면 package effectiveJava.item7; import java.util.Arrays; import java.util.EmptyStackException; public class Stack { private Object[] eleme.. 2023. 1. 29.
[Item 6] 불필요한 객체 생성을 피하라 같은 기능을 하는 객체는 하나를 재사용하는 방법을 고려해야 한다. Wrapper Class 자바의 wrapper class 인 Byte, Short, Integer 등 이있다. primitive type 을 wrapper class로 변환할때, new와 valueOf를 통한 인스턴스 생성이 있는데, 팩터리 메서드인 valueOf를 이용하게 되면 캐싱을 이용하여 불필요한 객체 생성을 막고 있다. public static Integer valueOf(int i) { if (i >= IntegerCache.low && i 2023. 1. 23.
[Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 의존 객체 주입 (Dependency Injection)을 프레임 워크로 제공하는 Dagger, Guice, Spring 등 있는데 한국의 대부분 자바 개발자에게 친숙하게 다가오는 것은 스프링 프레임워크일 것이다. 스프링을 생각해보면 인터페이스 기반으로 클래스 레벨에서는 의존하지 않고 런타임 시 동적으로 주입받는 역할로 많이 사용되고 있다. 이처럼, 유연성을 확보하고 결합도를 낮춰 주는 등의 장점이 존재한다. 여기서 언급되는 정적 유틸리티 클래스, 싱글턴으로서 구현되면 위의 장점과 반대로 유연하지 못하고 결합도는 높아진다. 유일 객체로 사용된다고 하였을 때는 유연성에 대한 고려는 하지 않아도 되겠다. . 이를 해소하기 위해 final 필드 제거하고 메서드를 통한 다형성을 제공할 수 있지만 멀티 스레드 환.. 2023. 1. 9.
정적 유틸리티 클래스 (Static Utility Class) Item 4 에서 자바 진영에서 제공하는 유틸성 클래스를 언급했다. [Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라 정적인 필드와 메서드를 담은 클래스의 구현은 객체 지향적인 사고는 아니자만, 공통점이 있는 메서드 혹은 팩터리들을 제공할 때 사용되기도 한다. 자바 진영에서 제공하는 기본 타입, 유틸성 be-study-record.tistory.com 외에도 Apache Commons의 StringUtils, IOUtils, FileUtils 등의 많은 유틸리티 클래스가 존재한다. 유틸리티 클래스는 자주 사용되는 공통 기능들을 제공한다. 이러한 공통기능을 자주 사용해 왔지만 이렇게 논쟁이 되고 있는지 몰랐다. https://stackoverflow.com/questions/33400.. 2023. 1. 9.
[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라 정적인 필드와 메서드를 담은 클래스의 구현은 객체 지향적인 사고는 아니자만, 공통점이 있는 메서드 혹은 팩터리들을 제공할 때 사용되기도 한다. 자바 진영에서 제공하는 기본 타입, 유틸성 인터페이스 등이 있고, 이외로 final 클래스가 있다. 위 예시처럼 정적으로 선언한 만큼 인스턴스 생성하지 못하도록하는 설계 의도가 담겨 있다. 여기서 아이템 4의 제목의 의미가 나타난다. 설계 의도대로 인스턴스화를 막으려면, private 생성자를 선언하라는 것이다. 생성자를 선언하지 않으면, 기본 생성자가 컴파일 타임에 생성되기 때문이다. Private로 선언하여도 클래스 내부에서는 접근이 가능하기에 생성자 호출 시 Assertion Error 예외를 방생시켜 실수를 방지 할 수 있다. 또한 상속 관계에서 하위타입 .. 2023. 1. 9.