inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

소켓 입/출력 설계 정리

해결됨

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

안녕하세요. 선생님! 프로토콜 설계관련 큰 흐름을 정리 해보고 있습니다. 주요 포인트는 서버에서 관리(TCP로 연결된 소켓)하고있는 클라이언트들의 요청을 어떤 구조로 처리할지? 총 3가지 형태로 정리되었습니다. 1. 블록 강의 : 멀티쓰레드 채팅서버 구조(블록 소켓) 2. 논블록 강의에는 없지만, 하나의 쓰레드에서 여러 논블록 소켓들 돌며 Receive를 확인하는 구조 3. 비동기 강의 : IOCP기반 채팅서버(클라이언트 수신처리를 OS에 등록하여 콜백 받는구조) 궁금한 부분은 다양한 프로토콜 설계를 "큰 주제"로 나눈다면 블록/ 논블록/ 비동기 이렇게 3가지 형태로 나누어도 크게 문제가 없을 지 궁금합니다.

  • socket.io
  • udp
  • iocp
  • tcpip
전우형 댓글 1 좋아요 0 조회수 467

mongoose.connect() 콜백 에러

미해결

사물인터넷 통신은 내 손에 (Arduino, MQTT, Nodejs, MongoDB, Android,VS Code)

Mongoose.prototype.connect() no longer accepts a callback 더이상 콜백을 허용하지 않는다며 에러가 뜹니다. 그래서 데이타베이스에 연결이 안되네요.

  • node.js
  • mongodb
  • arduino
  • iot
  • MQTT
으눙이파 No.3 댓글 1 좋아요 0 조회수 339

수업자료

미해결

외주 없이 디자이너처럼 스마트스토어 디자인 꾸미기

수업자료 어디서 다운받나요

  • photoshop
  • 웹-디자인
  • 스마트스토어
  • 콘텐츠-제작
장정현 댓글 1 좋아요 0 조회수 264

springSecurity

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

이미 질문남기신 분들이 많기에 해당 코드들을 따라서 실행하려고 해 보았으나 스프링 시큐리티 버젼이 올라감에 따라 새롭게 코드를 작성을 해보기 위해 문서를 참고해서 수정을 했습니다만 접속을 하려고 보니 HTTP ERROR 403 에러가 뜨면서 localhost 접근이 막히더군요 혹시 고쳐야할 부분이 있을까요?

  • java
  • spring
  • spring-boot
  • jpa
  • thymeleaf
최정식 댓글 2 좋아요 0 조회수 541

회원웹기능-홈/ Process finished with exit code 1

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] home.html까지 만들고 run을 했는데Action:Consider defining a bean of type 'hello.hellospring.domain.Member' in your configuration.Process finished with exit code 1 이런 오류가 뜹니다.domain.Member는 package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 입니다.

  • java
  • spring
  • mvc
  • spring-boot
박예원[ 학부재학 / 컴퓨터융합 댓글 1 좋아요 0 조회수 339

[3.5장 컨택스트 훅] 3.5.2 useContenxt 에서 질문이 있습니다.

해결됨

[React 2부] 고급 주제와 훅

안녕하세요 선생님 Count, PlusButton이 re render 되는 조건을 알고 싶습니다. 예전예시에서는 class Consumer extends React.Component { constructor(props) { super(props); this.state = { value: emitter.get(), }; this.setValue = this.setValue.bind(this); } setValue(nextValue) { this.setState({ value: nextValue }); } componentDidMount() { emitter.on(this.setValue); } componentWillUnmount() { emitter.off(this.setValue); } render() { return <>{this.props.children(this.state.value)}</>; } } Consumer가 state를 가지고 있음으로 순서가 Provider render -> Consumer render -> Consumer componentDidMount -> Provider componentDidMount (set 을 통해 빈 객체였던 것을 value, setValue로 바꿔줌) 이때 Consumer state는 emitter.get()임으로 변경된 것을 감지 하고 re render 하는 것으로 이해했었습니다. 헌데 이번예시에서는 function useContext(context) { console.log("userContext, context.emitter.get() = ", context.emitter.get()); const [value, setValue] = React.useState(context.emitter.get()); React.useEffect(() => { console.log("Consumer useEffect"); context.emitter.on(setValue); return () => { console.log("Consumer useEffect clean"); context.emitter.off(setValue); }; }, [context]); return value; } const Count = () => { console.log("Count render"); const { count } = MyReact.useContext(countContext); return <div>{count}</div>; }; Provider render -> Count(Consumer) render -> Count's useEffect -> Provider's useEffect 을 통해 emitter 값이 빈객체에서 count, setCount로 채워지는것은 이해하였습니다. 이때 Count 가 다시 한번 re render되는데 왜 그런 것인가요? 첫번째 예시처럼 state?같은게 존재하는건가요? 다시 render되는 조건이 궁금합니다.

  • react
  • React-Context
  • react-hooks
  • react-router
  • react-component
dohyun_lim 댓글 2 좋아요 1 조회수 465

NullPointerException

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.jdbc.repository.MemberRepositoryV1.save(hello.jdbc.domain.Member)" because "this.memberRepository" is null memberRepositoryV1.save 하는 과정에서 널포인터익셉션이 났습니다. package hello.jdbc.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.domain.Member; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.support.JdbcUtils; import javax.sql.DataSource; import java.sql.*; import java.util.NoSuchElementException; /** * JDBA - DataSource 사용, JdbcUtils 사용 */ @Slf4j public class MemberRepositoryV1 { private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource) { this.dataSource = dataSource; } public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values (?,?)"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } public Member findById(String memberId) throws SQLException { String sql = "select * from member where member_id=?"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); rs = pstmt.executeQuery(); if (rs.next()) { Member member = new Member(); member.setMemberId(rs.getString("member_id")); member.setMoney(rs.getInt("money")); return member; } else { throw new NoSuchElementException("member not found memberId=" + memberId); } } catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, rs); } } public void update(String memberId, int money) throws SQLException { String sql = "update member set money=? where member_id=?"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setInt(1, money); pstmt.setString(2, memberId); int resultSize = pstmt.executeUpdate(); log.info("resultSize={}", resultSize); }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } public void delete(String memberId) throws SQLException { String sql = "delete from member where member_id=?"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); pstmt.executeUpdate(); }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); JdbcUtils.closeConnection(con); } private Connection getConnection() throws SQLException { Connection con = dataSource.getConnection(); log.info("get connection={}, class={}", con, con.getClass()); return con; } } package hello.jdbc.repository; import com.zaxxer.hikari.HikariDataSource; import hello.jdbc.connection.ConnectionConst; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.jdbc.datasource.DriverManagerDataSource; import java.net.URL; import java.sql.DriverManager; import java.sql.SQLException; import java.util.NoSuchElementException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @Slf4j class MemberRepositoryV1Test { MemberRepositoryV1 repository; @BeforeEach void beforeEach() { //기본 driverManager - 항상 새로운 커넥션을 획득 // DriverManagerDataSource dataSource = new DriverManagerDataSource(ConnectionConst.URL, ConnectionConst.USERNAME, ConnectionConst.PASSWORD); //커넥션 풀링 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(ConnectionConst.URL); dataSource.setUsername(ConnectionConst.USERNAME); dataSource.setPassword(ConnectionConst.PASSWORD); repository = new MemberRepositoryV1(dataSource); } @Test void crud() throws SQLException { //save Member member = new Member("memberV2", 10000); repository.save(member); //findById Member findMember = repository.findById(member.getMemberId()); log.info("findMember={}", findMember); log.info("member != findMember {}", member == findMember); assertThat(findMember).isEqualTo(member); //update repository.update(member.getMemberId(), 20000); Member updateMember = repository.findById(member.getMemberId()); assertThat(updateMember.getMoney()).isEqualTo(20000); //delete repository.delete(member.getMemberId()); assertThatThrownBy(() -> repository.findById(member.getMemberId())) .isInstanceOf(NoSuchElementException.class); } }

  • spring
  • mvc
  • spring-jdbc
아가미 댓글 2 좋아요 0 조회수 327

이 코드는 왜 YES만 Success인가요?

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

안녕하세요. 선생님. 영상도 참고하면서 제 방식대로 조금 짜봤는데 잘 안되서 여쭤봅니다. #include <bits/stdc++.h> using namespace std; int n, res = 0; int a[101]; int main() { cin >> n; vector<int> ch(n); for(int i = 0; i < n; i++) { cin >> a[i]; } for(int i = 0; a[i]!='\0'; i++) { res = abs(a[i]-a[i+1]); if( res > 0 && res < n && ch[res] == 0 ) { ch[res] = 1; } } // 이 부분입니다. for(int i = 0; ch[i] != '\0'; i++) { if(ch[i] == 0) { cout << "NO"; return 0; } } cout<<"YES"; return 0; } 3번째 for문에서 i < n을 하면 NO부분에서만 success가 뜨고 위와 같이 하면 Yes부분에서만 Success가 뜹니다. 도움부탁드리겠습니다. 감사합니다.

  • c++
  • 코딩-테스트
메구밍 댓글 1 좋아요 0 조회수 229

1-N 질문 드립니다

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님 😀 1-N 백준 1629 문제에서 제공해주신 코드에 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, b, c; ll go(ll a, ll b){ if(b == 1) return a % c; ll ret = go(a, b / 2); ret = (ret * ret) % c; if(b % 2)ret = (ret * a)% c; return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> a >> b >> c; cout << go(a, b) << "\n"; return 0; } 여기에서 if(b % 2)ret = (ret * a)% c; 원래 공식에 대입하면 이 부분에 (ret * a % c) % c 가 들어오는 것이 맞지 않나요..? 어떻게 이렇게 되는지 궁금합니다 ㅜㅜ go(2, 3) 이라고 할 때, 이렇게 되어서 if(b % 2)ret = (ret * a)% c; 이 아니라, if(b % 2)ret = (ret * (a % c))% c; 가 된다고 생각했는데 설명해주시면 감사합니다..ㅜㅜ 다른 질문에 답변 달아주신 내용 확인해서 이해하였습니다~!!

  • c++
  • 코딩-테스트
Clain 댓글 2 좋아요 0 조회수 159

JpaMetamodelEntityInformation 내부의 isNew 메서드에서 조건 분기 시 다음 조건은 무엇을 의미하나요?

미해결

실전! 스프링 데이터 JPA

public boolean isNew(T entity) { if (!this.versionAttribute.isEmpty() && !(Boolean)this.versionAttribute.map(Attribute::getJavaType).map(Class::isPrimitive).orElse(false)) { BeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity); return (Boolean)this.versionAttribute.map((it) -> { return wrapper.getPropertyValue(it.getName()) == null; }).orElse(true); } else { return super.isNew(entity); } } 조건문을 타지 않고 else 절로 넘어가면 super.isNew() 를 호출하고, 상위 추상 클래스인 AbstractEntityInformation 클래스의 isNew() 메서드에서 Entity id 필드가 Null, 0L인지 판단하는 걸로 이해했습니다. 강의 범위가 아니긴 하지만 JpaMetamodelEntityInformation 클래스의 isNew() 내에서 versionAttribute가 존재하는지 확인하는 부분은 어떤 것을 확인하는 것인지 궁금합니다.

  • java
  • spring
  • spring-boot
  • jpa
hyese ch 댓글 1 좋아요 0 조회수 265

소켓,File 질문있습니다!

해결됨

외워서 끝내는 네트워크 핵심이론 - 기초

선생님 안녕하세요! 수업 잘 듣고 있습니다! 질문이 있습니다! 소켓은 커널모드로 진입해 네트워크를 통신하기 위한 추상 인터페이스다, h/w와 소통하기 위해 kernel의 도움을 받아야 하는데 네트워크 통신을 할 때 추상 인터페이스를 부르는 명칭이 소켓인것이고 I/O 장치와 상호작용 할 때는 file이라고 부르는 것이 맞나요?

  • 네트워크
  • 프로토콜
빵빵이 댓글 2 좋아요 0 조회수 475

모바일 GNB화이트 설정

미해결

외주 없이 디자이너처럼 스마트스토어 디자인 꾸미기

모바일 GNB화이트 설정어디서 하는지 모르겠습니다

  • photoshop
  • 웹-디자인
  • 스마트스토어
  • 콘텐츠-제작
장정현 댓글 1 좋아요 0 조회수 219

PessimisticLock을 분산락으로 활용하는 질문에 대한 답변 남기겠습니다.

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

github repository url : https://github.com/developer-yoni/ecommerce/tree/study/concurrency/redis 여기서 study/concurrency/redis 브랜치 를 확인해주시면 됩니다. StockServiceTest의 400번째 라인부터 503번째 라인까지 테스트 코드가 작성되어 있습니다. 큰 흐름은 동시성 이슈가 발생가능한 Stock에는 Lock을 걸지 않고, 다른 Entity인 Market Entity에 PessimisticLock을 걸어, PessimisticLock을 분산락으로 활용하려는 시도 입니다. 여기서 4_1 테스트는 Market에 PessimisticLock을 거는 트랜잭션과 Stock의 재고를 감소시키는 트랜잭션을 하나의 트랜잭션으로 묶었고, 4_2 테스트는 별개의 트랜잭션으로 분리했습니다. 이때 질문은 다음과 같습니다 Q1. 동시성 이슈가 일어나지 않는 다른 Entity에 PessimisticLock을 걸어 분산락처럼 활용하는게 문제가 되지 않을지 궁금합니다. 혹시 문제가 된다면 , 어떤 측면에서 문제가 될지 궁금합니다. 왜냐하면 어차피 동시성 이슈가 일어날 수 있는 측면의 값을 커밋하여 update함과 동시에 PessmisticLock을 반환하는 것이니 문제가 되지 않을것이라고 생각했기 때문입니다. Q2. PessimisticLock을 건 트랜잭션이 커밋되거나 롤백될 때 비로소 PessmisticLock이 반환된다는 점을 근거로, 4_2 테스트에서는 일부로 재고감소를 먼저 커밋한 후, Market의 PessimisticLock을 커밋하여, 반드시 업데이트가 이뤄난 후 락을 반환하는것을 의도하였습니다. 그러나 제 의도와 다르게 4_2 테스트는 계속 lock이 걸려있는? 흐름을 보이면서 테스트에 실패합니다. 그원인을 잘 모르겠습니다. 바쁘신 와중에 답변 달아주셔서 감사합니다 강사님.

  • java
  • spring
  • 동시성
요니 댓글 2 좋아요 0 조회수 244

h2 초기 실행 문제

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

The Web Console server could not be started. Possible cause: another server is already running at http://192.168.0.25:8082 Root cause: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-224] Exception in thread "main" org.h2.jdbc.JdbcSQLNonTransientConnectionException: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-224] at org.h2.message.DbException.getJdbcSQLException(DbException.java:690) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:212) at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:211) at org.h2.util.NetUtils.createServerSocket(NetUtils.java:177) at org.h2.server.web.WebServer.start(WebServer.java:412) at org.h2.tools.Server.start(Server.java:548) at org.h2.tools.Console.runTool(Console.java:216) at org.h2.tools.Console.main(Console.java:72) Caused by: java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:565) at java.base/sun.nio.ch.Net.bind(Net.java:554) at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:636) at java.base/java.net.ServerSocket.bind(ServerSocket.java:391) at java.base/java.net.ServerSocket.<init>(ServerSocket.java:278) at java.base/java.net.ServerSocket.<init>(ServerSocket.java:171) at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:207) ... 5 more cmd 에서 h2.bat 실행 시 이렇게 포트가 이미 사용중이라고 뜨는데요 포트 번호 바꿔서 사용해도 될까요? 8083 같은거로요!

  • java
  • spring
  • mvc
  • spring-boot
댓글 1 좋아요 0 조회수 676

다른 강의도 듣고 싶어요

해결됨

따라하면서 배우는 고박사의 유니티 기초

https://www.youtube.com/@unitynote/playlists 에서 2D기초강의를 듣고 싶은데 2D횡스크롤 게임(예 : 메탈슬러그, 슈퍼마리오)을 만들려면 어느 강의를 추천할수 있나요?

  • unity
윤식 댓글 1 좋아요 0 조회수 322

급여 최저치 문제

미해결

윤재성의 Oracle SQL Database 11g PL/SQL Developer

안녕하세요 선생님, 좋은 강의 보여주셔서 감사합니다. 다름이 아니라 23강에서 문제 풀이 도중 이해가 안 가는 부분이 있어서 이렇게 여쭙습니다. <문제> -- 각 부서별 급여 최저치보다 더 많이 받는 사원들의 사원번호, 이름, 급여를 가져온다. <선생님 풀이> select empno, ename, sal from emp where sal > all (select min(sal) from emp group by deptno); 이렇게 진행되면 각 부서별 최저치에서 가장 높은 급여와 비교되는 것이 아닌가 싶어 질문드립니다. 총 인원이 14명인 경우 가장 최저치를 받는 사람들 3명(부서가 3개)을 제외하면 11명이 나와야 할 듯한데 선생님 답에서는 8명만 나와서요...

  • sql
  • oracle
  • PL/SQL
  • dbms/rdbms
Jaeyoung 댓글 1 좋아요 0 조회수 252

모델링 중 face가 뭉개지는 현상 문의

해결됨

블렌더 기초 : 3D그래픽 여행 아이콘을 만들며 배우는 블렌더 애니메이션 기초 과정

강사님 안녕하세요 :) 카드리더기 모델링 중 face 선택 시 스크린샷처럼 뭉개지는 현상이 있어 질문 드립니다. 처음부터 다시 만들어봤는데도 재현되었습니다. X-ray 모드에서 verticies 선택하고 move 하는 과정에서 뭔가 잘못되었나 싶기도 한데 혹시 짐작가시는 부분이 있을까요? 모델링할 때 어떤 부분을 주의해서 그리면 좋을지 궁금합니다 :)

  • blender
  • 3d
  • 3d-modelling
  • 3d-rendering
  • 3d-modeling
365kim 댓글 1 좋아요 0 조회수 328

Intellij 클래스만들때 질문

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

[질문 내용] 사진처럼 클래스를 만들면 주황색글씨로 뜨는데 혹시 오류가 있어서 그런걸까요? 제 Git 계정이랑 연동해놔서 그런건지 아니면 뭐가 문제가 생겨서 저렇게 주황색으로 되는건지 모르겠습니다.

  • java
  • intellij
moses11004 댓글 1 좋아요 0 조회수 431

테스트 할 때 궁금한점입니다!

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 테스트 코드를 작성하다가 궁금한점입니다! assertion을 사용할 때 JUnit이 아닌 AssertJ 를 추천하는 이유가 있을까요?

  • spring
  • mvc
  • spring-jdbc
김태헌 댓글 1 좋아요 0 조회수 235

인기 태그

인프런 TOP Writers

주간 인기글