본문 바로가기

분류 전체보기107

그룹웨어 서비스 연동 - 협업간 조직도 연동 방식 고찰 들어가기 회사에서 제공하는 서비스를 특정 기관(고객)에 배포를 하는데, 다른 솔루션 업체들과 협업을 하는 경우가 많았다. 그럴 때마다 공통으로 확인하는 사항이 있었는데, 바로 조직도이다. 웹메일, 메신저, ERP, 포탈, 그룹웨어 등 다양한 솔루션을 주로 담당하는 회사들의 제품을 사용하는 고객입장에서는 모든 기능에서 조직도는 동일해야 문제없이 업무를 진행할 수 있다. 즉, 업체들끼리 조직도를 연동해야 할 필요성이 있는 것이다.이 글에서는 이러한 조직도를 연동하는 방식에 대해 간단하게 언급하고자 한다. 본론 여러 방법들을 언급하기 전에 가장 먼저 정해야 하는 것이 있다. 마스터, 슬레이브를 정하여할것인지, 아닌지이다. 즉, 조직도 동기화의 주체가 되는 마스터 업체와 이를 반영하는 슬레이브 업체를 따로 .. 2025. 4. 20.
오라클 19c 설치 및 SqlDeveloper 연결 들어가기 회사에서 리눅스에 오라클 DB를 설치하여 운용하고 있다. 이미 설치되어 있는 것을 사용하고 있지만, 이떻게 설치하는지 과정을 이해하는 것이 중요하다고 생각하여 빈 노트북에 설치하는 과정을 밟았다. 리눅스 버전은 Rocky Linux 8.1 이고 오라클 버전은 19c 이다.이 글은 오라클 19c를 설치하고 Sql Developer로 연결하기까지의 과정을 간단하게 작성한 글이다. 본론 1. 오라클 설치 1) 필요 라이브러리 설치$ yum groupinstall -y "Development Tools" 개발 도구 그룹을 설치하는 명령어로 이 그룹은 여러 가지 필수 개발 도구들을 한 번에 설치하는 역할을 한다. 설치되는 주요 패키지들은 아래와 같다. gcc (C/C++ 컴파일러)make (빌드 도.. 2025. 3. 9.
JAVA - String과 StringBuiler는 어떻게 다른가 들어가기 코딩 테스트 문제를 풀면서 의문이 든 점이 있었다. String을 활용하여 문자열을 다룰 수 있는데 왜 StringBuilder를 사용하여 append(), delete()와 같은 메서드를 사용하여 문자열을 수정하는 것일까?처음에는 단순히 가독성 때문이라고 생각을 하였지만, 알고 보니 StringBuilder를 사용하는 것이 더 효율적이기 때문이었다. 효율성이 나는 이유는 String은 불변 객체로서 문자열을 저장하고, StringBuilder는 가변 객체로서 문자열을 저장하는 것에서 비롯된다. 그렇다면 둘다 같은 문자열을 저장하는 객체인데 어떻게 차이가 나는 것인가?또한 String은 불변 객체이지만 어떻게 아래와 같이 문자열에 추가로 대입할 수 있는 것인가?String temp = "test.. 2024. 11. 14.
SMTP을 사용한 메일 통신은 어떻게 진행되는가?(With POP3, IMAP) 들어가기 일반 웹 통신(HTTP)와 다르게 메일 전송을 위해서는 SMTP를 사용한다.SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하기 위해 사용되는 인터넷 표준 프로토콜이며, SMTP는 이메일 메시지를 작성한 후, 해당 메시지를 수신자에게 전달하는 과정에서 주로 사용된다. 이 프로토콜은 발신자의 이메일 서버에서 수신자의 이메일 서버로 메시지를 전송하는 역할을 한다.지난번 Spring boot를 상요하여 프로젝트를 진행할 때, JavaMailSender, Gmail을 통한 메일 전송 기능을 구현하였다. 구현하면서 드는 생각은, SMTP를 사용하였지만, SMTP 통신 과정이 어떻게 이루어지는지 정확히 파악하지 못하였다는 것이다. 학습을 하는 과정은 단순히 사용하는 것만이 아.. 2024. 10. 19.
Spring boot - 로그백(Logback)을 통한 로그 파일 관리 들어가기  프로젝트를 진행 중, 실제 사용자로 인해 발생하는 예외 및 로그를 확실히 파악하기 위해서 로그를 기록한 파일을 정리하고자 하였다. 이를 위해 스프링에서 사용할 수 있는 로깅 프레임워크 중 하나인 Logback을 통해 진행하고자 한다. Logback은 SLF4J의 구현체이며 Spring Boot 환경이라면 별도의 dependency 추가 없이 기본적으로 포함되어 있어(spring-boot-starter-web), 간편하게 로그 처리를 진행할 수 있다. 아래와 같이 @Slf4j 어노테이션을 지정해 주는 것으로 해당 클래스 내에서 사용할 수 있으며, 로그 레벨(trace, debug, info, warn, error)에 따라 메서드를 사용하고 메시지를 남기면 쉽게 사용할 수 있다. @Slf4j@Re.. 2024. 10. 8.
Spring boot - thymeleaf를 통한 html 파일 다국어 이메일 전송 들어가기 프로젝트 진행 중 메일 전송 기능을 진행하고 있다. 문제는 글로벌 사용자를 대상으로 하고 있기 때문에, 언어별 html 파일이 존재해야 한다. 하지만 언어별 html 파일을 만들고 비즈니스 로직에서 분기점을 만드는 방법은 번거로운 방법이며 가독성이 떨어질 것이다. 그래서 MessageSource를 활용하려고 한다. html 파일은 하나만 만들어 두고, 언어별 messages.properties 파일 내 html 텍스트를 지정하는 것이다.  이 글에선 이메일 전송을 위한 thymeleaf를 통한 html 파일 작성 시 한국어, 일본어, 영어 버전으로 작성하는 과정을 담고 있다.  MessageSource에 대한 내용은 https://khdscor.tistory.com/133를 참고하길 바란다. S.. 2024. 9. 29.
MessageSource와 Locale을 활용한 다국어 에러 처리(with Spring boot) 들어가기 현재 진행하는 프로젝트는 한국인만이 아니라 외국인 대상으로도 출시를  목표로 하고 있다. 그렇기에 평소에 하던 것처럼 한국어로만 앱을 구성하는 것이 아닌, 다국어 버전으로 작성해야 한다. 에러 메시지를 사용자에게 전달할 때, 언어에 따라 분기점을 만드는 것을 생각했지만, 이는 복잡성을 증가시킬 것이다. 이런 경우를 위해 Spring boot에서는  'MessageSource' 객체와 'Locale' 객체를 활용한 다국어 기능을 지원해 준다. MessageSource는 Spring 프레임워크에서 다국어 지원을 위한 메시지 처리를 담당하는 인터페이스이며, 이를 통해 다양한 언어에 맞는 메시지를 쉽게 관리하고, 사용자의 Locale에 해당하는 메시지를 반환해준다.Locale은 특정 언어나 국가, 지역.. 2024. 9. 19.
Spring boot - @Async를 통한 메서드 비동기 실행 및 주의사항 이전 글(https://khdscor.tistory.com/131)에서 Spring boot에서 gmail smtp 서버를 통해 메일 전송 기능을 구현하였는데, 응답 시간이 오래 걸리는 것을 확인하였다.대략 4초가 걸렸는데, 사용자가 응답을 받는 데까지 기다리는 시간이 오래 걸리기 때문에 좋지 못한 상황이다. 그런데, 대부분의 사이트에서 인증 메일을 보낼 때는 대기 없이 바로 인증 메일을 전송했다는 응답을 받는다. 어떻게 이럴 수 있나 찾아보다가 @Async 어노테이션을 통해 특정 메서드를 비동기 방식으로 진행할 수 있다는 것을 알게 되었다.   @Async 어노테이션이 추가된 메서드는  별도의 스레드에서 실행되므로, 사용자는 해당 메서드가 종료되기 전에 응답을 받을 수 있고, 비동기로 동작하는 메서드는.. 2024. 8. 29.
Spring boot - email 발송 기능 구현(with Gmail) 들어가기 spring boot를 통해 프로젝트를 진행하던 중 초대장을 메일로 전송하는 기능을 구현해야 하여 메일 전송에 대해서 알아보고자 한다. 일반 웹 통신(HTTP)와 다르게 메일 전송을 위해서는 SMTP를 사용한다. SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하기 위해 사용되는 인터넷 표준 프로토콜이며, SMTP는 이메일 메시지를 작성한 후, 해당 메시지를 수신자에게 전달하는 과정에서 주로 사용된다. 이 프로토콜은 발신자의 이메일 서버에서 수신자의 이메일 서버로 메시지를 전송하는 역할을 한다.아래의 사진을 봐보자.  1. 발신자는 자신의 이메일 클라이언트에서 이메일 메시지를 작성하고, 수신자의 이메일 주소를 입력한 후 메시지를 전송한다. 2. 메시지(및 첨부 파일.. 2024. 8. 27.