전체 글985 온라인 회로 사이트 https://circuitverse.org/simulator CircuitVerse - Digital Circuit Simulator online Reset Code Save Code This is an experimental module. The code is not saved unless the "Save Code" button is clicked. circuitverse.org 2023. 2. 21. 아싸 2023. 2. 20. 디지털 논리 회로 사전 지식 디지털회로는 집적회로로 구성된다. 집적회로(Integrated Circuit, IC)는 전자 회로를 한 개의 실리콘 칩에 집적하여 제작한 전자 부품입니다. 집적회로는 수많은 능동소자(트랜지스터, 다이오드 등)와 수동소자(저항, 캐패시터 등)를 작은 실리콘 판 위에 집적하여 만듭니다. 전자 부품은 능동 소자(Active component)와 수동 소자(Passive component)로 구분됩니다. 능동 소자는 전기 신호를 증폭하거나, 변환하거나, 발생하는 소자를 말합니다. 대표적인 능동 소자로는 트랜지스터(transistor), 다이오드(diode), 집적회로(IC, Integrated Circuit) 등이 있습니다. 트랜지스터는 입력 신호를 증폭하는 데 사용되며, 다이오드는 전류를 제어하는 데 사용됩니.. 2023. 2. 20. Increasing Code Cache Increasing the Code Cache Size tier 4로 코드를 컴파일하는 경우 해당 코드가 이제 Code Cache에 추가되는 것을 안다. 다만 Code Cache의 크기는 제한적이라는 문제가 하나 있다. Julio Falbo에 따르면 많은 양의 메서드가 tier 4에 추가되는 경우, 다음 코드를 위해서 몇 개의 코드는 Code Cache에서 제거된다는 것이다. 제거된 코드블록은 다시 다른 코드블록을 제거하고 다시 추가되는 반복적인 상황이 발생한다. ( 해당 글에는 code cache size가 가득 찬 경우 코드블록이 추가될 때 어떤 원리나 순서로 삭제된다는 설명글이 없다. ) 다른 말로 하면 거대한 애플리케이션을 운영하면서 level 4로 컴파일된 코드블록들은 지속적으로 code cac.. 2023. 2. 20. 2월 중순 정리. 2월 20일 방통재 수업 시작 전 두 권의 책을 읽었다. 전자회로와 같은 개념으로 시작하여 컴퓨터 구조와 프로그래밍이 어떻게 반절했는지 순차적으로 설명한다. 프로그래밍과 컴퓨터 구조에 대한 역사를 읽어준다. 흥미롭게 읽었지만 이해가 안 되는 부분이 상당히 많아서 진지하게 읽으려면 선행지식이 좀 많이 필요하다. 그래서 방통대 수강 신청할 때 논리회로 수업을 넣었다. 공부해 보고 한번 더 읽어보려고 한다. 입문책으로 널리 사용되는 개념을 알기 쉽게 예시로 알려준다. 좋은 책이다. 여러 가지 실습도 존재해서 재밌게 보았다. 여러 가지로 흩어져있던 네트워크 지식을 한대로 모으는데 도움을 준 책이다. 나중에 필요할 때마다 꺼내 읽어도 될 것 같다. 인프런에서 구매했던 강의를 완강했다. 실무에 상당히 도움이 됐는데.. 2023. 2. 18. Code Cache 애플리케이션 모니터링을 도입하던 도중 위젯에 code cache에 관해 설명하는 부분이 있었다. Granafa에서 필요 없는 모니터링 위젯을 제거하는 과정에서 code cache가 무엇인지 몰라 정리를 늦췄는데 이번에 한번 알아보려고 한다. 이 글은 다음 블로그를 참고했다. https://julio-falbo.medium.com/ Júlio Falbo – Medium Read writing from Júlio Falbo on Medium. https://www.linkedin.com/in/juliofalbo/. Every day, Júlio Falbo and thousands of other voices read, write, and share important stories on Medium. juli.. 2023. 2. 18. Prometheus & Grafana 1월 31일 2.42.0 버전이 릴리즈 되었다. 해당 버전을 기준으로 공식문서를 참고해서 읽어보자. 프로메테우스는 오픈 소스의 모니터링, 알람 툴킷 시스템이다. *알람 툴킷이 뭐지? 알람 툴킷(Alarm Toolkit)은 소프트웨어 개발자가 알람 및 예약된 작업을 구현할 수 있는 라이브러리나 도구 모음입니다. 이를 사용하면 개발자는 알람 및 예약된 작업에 대한 로직을 작성하지 않고도 프로그램에서 쉽게 이러한 작업을 구현할 수 있습니다. 알람 툴킷은 다양한 운영 체제 및 프로그래밍 언어에서 사용할 수 있으며, 예약된 작업을 처리하는 방법과 알람을 설정하고 관리하는 방법을 추상화하여 개발자가 구현을 간소화합니다. 예를 들어, 개발자가 지정한 시간에 작업을 실행하거나 일정 시간이 경과한 후에 알림을 표시하는 .. 2023. 2. 17. Spring Boot Actuator 스프링 부트는 애플리케이션에 대해 관리하고 모니터링을 도울 수 있는 추가적인 기능이 포함되어 있습니다. 이때 HTTP endpoints, JMX 둘 중 어떠한 방법으로 모니터링하고 관리할 것인지 선택할 수 있습니다. Auditing, health, metrics 수집까지 거의 대부분 자동적으로 애플리케이션에 적용할 수 있습니다. spring-boot-actuator module을 dependency에 추가함으로 써 매우 쉽게 적용할 수 있습니다. gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' } Actuator의 용어에 대한 정의는 다음과 같습니다. 액추에이터(actuator)는 무언가.. 2023. 2. 16. Monitoring 운영하는 서비스가 장애가 발생한 적이 있습니다. 이를 뒤늦게 알았고 어떠한 알림도 개발자에게 전달되지 않았습니다. 원인은 서버의 동작문제가 아닌 로드밸런서의 인증서가 만료되어 발생한 문제였고, 이는 다른 회사의 서버 개발자의 실수로 발생했지만 이에 대해 너무 늦은 대처로 서비스가 장시간 장애 상태로 유지되었다는 것과 장애를 제가 인지하지 못했다는 것을 자책하게 되었습니다. 환경 탓을 하지 않고 내 잘못이라고 생각하니 이를 어떻게 해결해야할지 고민이 되었고 이를 해결하기 위한 여러 가지 해결 방법을 찾기 시작했습니다. 그래서 찾은 답은 모니터링을 도입해보는 것이었습니다. 저는 모니터링을 도입해 본 적은 없습니다. 모니터링이 어떠한 수치를 제공해 주는지도 모릅니다. 모니터링이 주는 이점에 대해 모릅니다. 어.. 2023. 2. 16. Load Balancer... 서비스에 로드밸런서가 연결되어 있다. 그렇기에 어떠한 이점을 얻고 로드밸런서가 무엇이고 AWS 로드밸런서는 어떤 특징을 가지고 있는지 확인한다. 로드 밸런서는 부하 분산 장비 중 하나로 L4, L7 스위치 역할을 한다. 어느 계층까지 프로토콜을 이해하여 부하를 분산하느냐에 따라 Layer가 나누어지는데 보통 구분하지 않고 사용한다고 한다. 하지만 AWS의 로드밸런서는 L4, L7의 계층을 나누어 제공한다. 이는 Load balancer type에 기재된 정보를 가지고 구별할 수 있다. 이러한 L4, L7의 로드밸런서에 대한 설명은 AWS 문서를 참고해 보자. Load balancer types - Amazon Elastic Container Service Load balancer types - Amazo.. 2023. 2. 15. DNS 주요 레코드 1. A (IPv4 호스트) A 레코드는 기본 레코드로 도메인 주소를 IP 주소로 변환하는 레코드입니다. 사용자가 DNS 서버에 질의한 도메인 주소를 A 레코드에 설정된 IP 주소로 응답합니다. A 레코드는 도메인 주소 한 개와 IP 주소 한 개가 1:1로 매핑됩니다. 2. AAAA(IPv6 호스트) AAAA 레코드는 IPv6 주소 체계에서 사용되는 레코드이며 역할은 A 레코드와 같습니다. 3. CNAME( Canonical Name) CNAME 레코드는 별칭 이름을 사용하게 해주는 레코드 입니다. A 레코드가 도메인과 IP 주소를 연결한 것과 달리 CNAME 레코드는 도메인 주소를 매핑합니다. 네임 서버가 CNAME 레코드에 대한 질의를 받으면 CNAME 레코드에 설정된 도메인 정보를 확인하고 그 도메.. 2023. 2. 12. NAT 그리고 PAT NAT NAT(Network Address Transaction, 네트워크 주소변환)은 실생활에서 많이 사용하는 기술입니다. 집에서는 공유기를 통해 사용하고 통신사에 연결된 스마트폰은 통신사 장비를 통해 외부와 통신하게 됩니다. L3 장비에서도 사용되며 특히 방화벽과 로드 밸런서와 같이 세션을 다루는 L4이상의 장비에서는 매우 빈번히 사용되는 기술입니다. NAT은 기본적으로 하나의 네트워크 주소를 다른 하나의 네트워크 주소로 변환하는 1:1 변환이 기본이지만 이는 IP 주소가 고갈되는 문제를 해결하기 위해 1:N으로 사용합니다. 보통 네트워크 주소를 다른 네트워크로 변환하는 기술을 NAT라고 부릅니다. 하지만 실제 공식 용어는 NAPT(Network Address Port Translation)이며 NA.. 2023. 2. 11. FTP Active, Passive 현대 웹에서 클라이언트와 통신을 위해서는 여러 세션을 유지하도록 하지 않는 이상 보통 하나의 세션을 가지고 통신합니다. 웹 같은 경우 HTTP 프로토콜로 서버와 웹으로 통신하나 세션에 대해서는 하위 계층인 TCP 프로토콜에서 세션 테이블을 통해 세션을 관리합니다. 이와 반대인 FTP( File Transfer Protocol)인 경우 프로토콜의 구조가 분리되어 있습니다. 바로 데이터 프로토콜과 컨트롤 프로토콜입니다. 데이터 프로토콜을 사용하여 서버와 클라이언트 간에 데이터 채널을 통해 데이터를 전송하는 것에 목적을 두었다면 컨트롤 프로토콜은 데이터의 전송을 위해 준비를 하고 신뢰성을 목적으로 둔 프로토콜입니다. 그렇기에 통신 방법이 다른 두 가지 모드를 가지고 있습니다. 우선 Active 모드를 간단히 .. 2023. 2. 11. Querydsl Projections Querydsl에서 Projections을 많이 사용한다. 왜 많이 사용할까? 그 대답은 성능과 직결되기 때문이다. 서버는 사용자의 요청에 응답을 해주어야 한다. 이 과정이 만약에 데이터베이스와 연결되어 있다면 데이터의 크기를 줄이는 작업 매우 큰 서비스에서는 성능과 직결될 수 있다. 또한 클라우드를 사용하는 추세에 응답에 대한 트래픽에 대한 요금이 부과되기 때문에 무작정 모든 데이터를 끌어올려서 메모리에 넣어 매우 큰 데이터를 가공하여 응답하면 금전적으로도 손실이 발생하기 때문이다. 프로그래밍적으로도 깔끔함을 유지할 수 있는 좋은 수단이 된다. 요즘은 아키텍처의 각 Layer 간 결합도를 낮추기 위해 여러 가지 방법들이 동원된다. 이 중 Projections을 사용하면 ui, service, repos.. 2023. 2. 9. OneToOne 연관관계에 대한 고민. 1:1 관계를 풀어내기 위해 엔티티 간의 연관관계를 설정했을 때 보통 둘 중 하나의 엔티티가 연관관계의 주인이 된다. 하지만 이러한 매핑은 효율적이지 않다. 자식 테이블은 별도의 PK가 존재하고, FK 칼럼도 존재하게 된다. 엔티티는 부모와 자식이 단 하나의 관계만 갖기때문에, 부모의 PK를 미러링 하는 것이 더 나은 선택이 될 수 있다. 이 방법에는 자식 테이블의 PK 값이 곧 FK값이 된다. 그리고 두 개의 테이블은 PK를 공유하게 된다. PK와 FK 칼럼은 자주 인덱스를 생성하게 됩니다. 위와 같은 설정은 저장공간을 절반으로 감소시킵니다. 이는 인덱스 스캐닝의 속도 향상을 하기 원한다면 매우 바람직한 방법입니다. 단방향의 @OneToOne 관계는 fetch 전략을 Lazy 하게 가져올 수 있습니다... 2023. 2. 9. 라우팅, 스위칭 2 계층의 스위치와는 다른 용어로 3 계층 장비인 라우터가 패킷 경로를 지정해서 보내는 작업을 말한다. 라우터가 패킷을 포워딩할 때 자신이 갖고 있는 라우팅 테이블에서 가장 좋은 항목을 찾는 알고리즘을 롱기스트 프리픽스 매치나 맥시멈 프리픽스 렝스 매치라고 한다. 목적지 패킷의 IP가 라우터 테이블에 정확하게 매칭되지 않을 경우 도작지 IP와 가장 가깝게 매치되는 정보를 찾는다. 이 경우 Longest Prefix Match 기법을 사용합니다. LPM이라는 용어는 다른 용어는 라우터나 스위치에서 관리할 수 있는 라우팅 테이블을 LPM 테이블이라고 부르며 도입해야 할 장비가 관리할 수 있는 테이블 양으로 대략적인 성능을 확인할 수 있습니다. 이런 내용은 장비 Datasheet에서 확인할 수 있습니다. Da.. 2023. 2. 9. Querydsl 기본(3) Lazy의 연관관계를 fetch로 가져오는 방법을 Querydsl을 활용해 가져와보자. fetch join은 성능 최적화를 위해 연관된 엔티티를 동시에 조회하기 위해 많이 사용한다. 하지만 일대다 관계가 많아질수록 이는 행의 수가 중복돼서 생성되기 때문에 Set이나 distinct를 통한 중복을 제거해 주는 별도의 방법이 필요했다. 보통 일대다 관계가 연속적으로 필요한 경우 batch size를 통해 성능 최적화를 진행했다. 나는 여기서 한 가지 궁금증이 생겼다. fetch join을 사용할 때 만약 연관관계에 있는 특정 필드를 꺼내서 전달하려는 목적을 가졌을 때는 Projections을 최대한으로 활용하고 연관관계를 통해 변경을 가하도록 영향을 주는 비즈니스 로직이 있을 때 fetch join을 사용하.. 2023. 2. 7. Querydsl 기본(2) 우선 기본적인 정렬이다. List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.username.asc().nullsLast()) .fetch(); orderBy 인자는 OrderSpecifier 타입을 받는다. 이 중에 nullsLast()와 nullsFirst()를 사용했을 때 SQL문이 궁금했다. select member0_."member_id" as member_i1_0_, member0_."age" as age2_0_, member0_."team_id" as team_id4_0_, member0_."username" as username3_0_ from "m.. 2023. 2. 6. QueryDSL 적용 방법 알아보기. Querydsl은 많은 프로젝트에 검증받은 프레임워크다. jpql을 래핑 하여 사용한다는 점에서 jpql의 한계를 우회하기 위해 성능 악화에 영향을 주는 기능도 있는 것으로 보인다. 추가적으로 Querydsl을 적용하는 방법도 다양하기 때문에 여러 가지 방법을 알아보고 적합한 방법으로 적용하는 것도 필요하다. 우선 어떤 방식으로 적용할 것인지 어떤 방법이 있는지 알아보려고 한다. Spring Data JPA 공식문서에 있는 Querydsl Extension을 알아보자. 해당 섹션에서는 QuerydslPredicateExecutor 를 통해 조회조건을 통해 검색할 수 있는 방법을 지원한다고 한다. public interface QuerydslPredicateExecutor { Optional findByI.. 2023. 2. 6. 읽고 싶은 책이 늘었다. 한 권으로 읽는 컴퓨터 구조와 프로그래밍 끙끙거리면서 책을 읽었다. 매우 어려운 내용들이 많아서 이해하기 힘든 부분에 대해 서치 하면서 최대한 이해하려 노력해 보았지만 회로 부분에서 상당히 고생했다. 이제 거의 다 읽었지만 뭔가 부족해 전자회로 관련 수업을 신청해서 공부한 후 관련 부분만 다시 읽을려고 한다. 이 책을 읽다보면 역사를 보는 기분이다. 어떻게 발전되고 우리가 사용하는 모든 것의 기반이 무엇인지 자세하지는 않지만 이해는 시켜주는 책이라고 느껴졌다. 한줄평 : "좋았다. 내 출퇴근 시간을 녹여주는 흥미로운 책이었고 프로그래밍에 대해 생각이 더 열린 기분이다." 요즘 설계문서에 대해 관심이 많다. 설계문서는 필수불가결하게 존재하게된다. 고객의 요구든, 자체 개발을 진행해도 그 과정을 한눈으로 정.. 2023. 2. 6. Spring Boot 좀 더 자세히. 도메인이 정해지면 개발자는 기술 스택에 대한 수많은 결정을 진행한다. 우리는 언어와, 빌드툴을 선택하고 어떤 플랫폼인지 확인한다. 1. 웹인가?, 웹이면 서블릿 기반인가 리액티브 기반인가? 2. 데이터접근기술이 필요하다면 하나의 데이터접근 방식만 사용할 것인가? 아니면 여러 데이터접근 방식을 사용하게 될 것인지. 3. 보안은 어떻게 할 것이며 4. 캐싱을 적용해야 하는지 5. API 문서는 어떻게 할 것인지 6. 클라우드 관련 기술을 무엇을 사용할 것인지 7. 어떤 아키텍처를 따를 것인지 8. 테스트 코드의 비율은 어떻게 맞출 것인지 9. 타 시스템과의 의사소통을 위해 이벤트가 필요하다면 어느 정도의 수준으로 처리될 것인지? 별도의 메시징 중개인을 사용해야 하는지 10. 코드는 어디에 저장할 것인지 11.. 2023. 2. 4. 관계형 데이터베이스의 기본키로 UUID Type을 사용한다면 고려사항 데이터베이스의 기본 키의 유형을 결정하는 것은 장기적으로 매우 중요한 요소를 갖는다고 생각한다. 나는 기본 키 유형을 선택해야 할 때 보통 자동으로 증분 되는 자연수를 선택한다. 이는 가장 적은 공간을 사용하면서 unique 특성을 잘 지킬 수 있게 하는 아주 쉬운 충분조건이라고 생각하기 때문이다. 그러던 와중 미리 데이터베이스와 Node.js 기반의 백엔드 서버로 구성된 한 애플리케이션을 봐야 하는 일이 생겼는데, 이때 기본 키의 타입이 UUID인 것을 발견했다. 이를 설계한 사람은 왜 UUID Type을 사용해야 했는지 의도를 좀 알려고 관련 정보를 찾아본다. 우선 UUID 타입의 간단한 정의가 필요하다. Universally Unique Identifier이라는 약자로 표준 128 bit pseud.. 2023. 2. 3. Properties Bean PostProcessor Properties를 등록하기 위해 설정 정보를 담고 있는 클래스를 만든다. @Component public class ServerProperties { private String contextPath; private int port; public String getContextPath() { return contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } } 이는 ServletWebServerFactory Bean의 속성 .. 2023. 2. 2. CQRS Pattern 마틴 파울러의 CQRS를 읽어보자. CQRS는 Command Query의 책임을 분리하는 것이다. Query는 상태를 변경하지 않는 결과를 반환하는 것 ( 사이드 이펙트가 없음) Commands는 상태를 변경하지만 결과를 반환하지 않는 것 마틴 파울러는 CQRS의 핵심은 서로 다른 모델을 사용하여 데이터의 갱신, 추가와 조회를 개별 적은 로 분리하는 것을 의미합니다. 하지만 이는 일부 상황에서 CQRS는 효율적이고 대부분의 시스템에서는 위험한 복잡성을 추가하는 것과 같다고 합니다. 이러한 주장에서 우리가 알아보아야 할 것은 무엇일까요? 바로 어떠한 상황에서 CQRS 패턴은 효율적인지 확인해 보아야 합니다. 또한 왜 대부분의 시스템에서는 명령과 조회의 책임을 분리함에 따라 복잡성을 낮추는 것이 아니라 증가.. 2023. 2. 2. [Querydsl] 기본 공식문서를 읽기 전에 학습 테스트를 만들면서 간단하게 사용해 보자. JPQL @Test public void startJPQL() throws Exception { Member result = em.createQuery("select m from Member m where m.username = :username", Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(result.getUsername()).isEqualTo("member1"); } Querydsl @Test public void startQuerydsl() throws Exception { JPAQueryFactory queryFactory =.. 2023. 2. 1. Hibernate Best Practices Thorben Janssen Home - Thorben Janssen Thrive Leads Shortcode could not be rendered, please check it in Thrive Leads Section! As seen at: Bring your Java persistence skills to the next… thorben-janssen.com JPA와 Hibernate에 대해서 조금 더 알아야 할 것 같아서 best practices의 글을 읽으면서 정리하고 공부하는 시간을 가졌다. Use a projection that fits your use case Projection은 쿼리의 검색 결과에서 반환되는 속성을 제한하는 기능을 말합니다. 즉 하나의 엔티티를 조회할 때 모든 속성을.. 2023. 2. 1. Hibernate 5 Bootstrapping API 오늘은 Hibernate 5.0에서 재설계된 Bootstrapping API를 알아보자. BootStrapping이란 용어는 소프트웨어 컴포넌트의 초기화 과정과 시작을 의미한다. Hibernate에서는 JPA를 위한 완벽한 구성을 위해 SessionFactory의 instance 혹은 EntityManagerFactory instace를 빌딩 하는 과정을 이야기한다. 또한 부트스트랩 프로세스 중에 Hibernate 동작을 커스텀할 수도 있다. 즉 SessionFactory를 빌딩 한다는 것은 시작 및 런타임 동안 Hibernate가 필요로 하는 서비스를 가지고 있는 ServiceRegistry 구현을 가지도록 하는 것입니다. 그렇기 때문에 ServiceRegistry에서 애플리케이션의 도메인 모델과 데이.. 2023. 2. 1. [Querydsl] 시작 초기에 jpql을 통해 동적쿼리나 Named Query를 작성하는 것을 벗어나서 이제 Querydsl을 사용하도록 변경하려고 한다. 정말로 동적 쿼리를 jpql을 사용하여 문자열로 합쳐서 사용하려니 중복코드와 휴먼에러가 정말 많이 발생한다. 또한 동적 쿼리에 대해 특정 조건이 추가되는 경우에 상당한 정신력을 소모하고 페이징 쿼리인 경우에 count를 조회하는 쿼리도 동일하게 중복해서 작성되기 때문에 매우 생산성이 떨어진다. Querydsl의 설정은 생각보다 복잡한 편이다. 하나씩 설정해 보자. https://start.spring.io/ Spring boot가 3.0 버전이 나왔다. 3.0 버전으로 진행하고 싶지만 3.0 버전의 default jdk 버전이 17이기에 일단 2.0 버전을 선택하여 만들려고.. 2023. 2. 1. Environment Properties 스프링 부트를 사용해 자동 구성 정보의 일부 내용을 변경하거나 설정해야 할 때 Environment를 통해서 프로퍼티의 값을 가져와 활용할 수 있다. 실제 커스텀 빈을 등록해야 하는 과정은 연관되고 주입되어야 하는 빈들 간의 연관관계가 많은 경우 매우 복잡해지는데, 스프링 부트는 간단하게 자동 구성의 디폴트 설정을 변경하는 게 가능하다. 스프링 부트는 기본적으로 application.properties. xml, yml 등의 프로퍼티를 읽어오는 기능을 추가했다. 자동 구성에서 Environment 프로퍼티를 주입받아서 속성값을 읽고 싶을 때 스프링 부트의 모든 초기화 작업이 끝나고 나면 실행되는 코드를 만드는 방법 중에 ApplicationRunner 인터페이스를 구현한 오브젝트 또는 람다식을 빈으로 등.. 2023. 1. 30. Event 최근 이벤트를 통한 느슨한 결합과 알림 기능을 구현하면서 여러 선택의 갈림길에 마주쳤는데 이를 고민하는 과정을 적는다. 이벤트를 무엇으로 구현할 것인가? 현재 자원에 맞춰서 생각했다. scale-out은 비즈니스적으로 불가능한 구조였고 scale-up은 어느 정도 합의를 통해 가능하다는 이야기를 들었다. 따라서 애플리케이션 서버의 리소스만을 사용하도록 구현해야 했다. 이를 위해 Spring Framework의 Application Event를 사용했다. Spring에서 제공하는 Applicaiton Event는 ApplicaitonContext의 확장 기능 중 하나로 ApplicationContext를 Wrapper Class인 ApplicationEventPublisher를 사용하여 Applicatio.. 2023. 1. 30. 이전 1 ··· 3 4 5 6 7 8 9 ··· 33 다음